JavaScript 2 ondalık basamağa kayan noktalı sayı gösteren


316

2 ondalık basamağa kadar bir sayı göstermek istedim.

toPrecision(2)JavaScript kullanabileceğimi düşündüm .

Ancak, sayı ise 0.05, anladım 0.0500. Aynı kalmayı tercih ederim.

JSbin'de görün .

Bunu yapmanın en iyi yolu nedir?

Birkaç çözüm kodlamayı düşünebilirim, ama böyle bir şeyin yerleşik olduğunu hayal ediyorum (umarım)?

Yanıtlar:


560
float_num.toFixed(2);

Not:toFixed() belirtilen uzunluğu karşılamak için gerekirse yuvarlak veya sıfırlarla doldurulur.


61
Ama kayan nokta değil dize döndürür!
Anwar

38
Soru yazar "görüntülemek" istiyor, bu yüzden bir dize mükemmel
Christophe Marois

7
Ve her zaman sadece iki ondalık tutarken dizeyi yeniden float'a dönüştürmek için her zaman parseFloat (float_num.toFixed (2)) kullanabilirsiniz.
Hankrecords

3
@anwar bir şamandırayı güvenilir bir şekilde yuvarlayamazsınız (tartışmasız bir şamandırayı yuvarlayabilirsiniz) - 0.0500 veya hatta 0.0500000000001 gibi bir şey elde edersiniz. Bkz floating-point-gui.de
JMC

2
@ Söylediklerin doğru değil. Eğer '43 .01 'varsa ve parseFloat varsa, o zaman 43.01 olsun ama '43 .10' varsa ben 43.1: D istediğim değil alacak.
Lucian Tarna



14

Bu soruya nasıl geldiğimi bilmiyorum, ancak bu sorulduğundan beri uzun yıllar olsa bile, takip ettiğim hızlı ve basit bir yöntem eklemek istiyorum ve beni asla hayal kırıklığına uğratmadı:

var num = response_from_a_function_or_something();

var fixedNum = parseFloat(num).toFixed( 2 );

1
Neden parseFloat()orada? Yalnızca sayı bir dizeden geliyorsa kullanılmalıdır.
alex

3
Bazı durumlarda bir öğeden jquery ile bazı "data-" öznitelik değeri aldığımda, yalnızca toFixed kullanırsanız bir hata üretir. parseFloat bunu düzeltir.
panos

2
Evet, eğer bir ipten geliyorsa , yukarıda bahsettiğim buydu . Ama her zaman kullanmak kötü bir tavsiye.
alex


8

number.parseFloat(2) çalışır, ancak bir dize döndürür.

Bunu bir sayı türü olarak korumak istiyorsanız şunları kullanabilirsiniz:

Math.round(number * 100) / 100


4

Karıştırma deneyebilirsiniz Number()ve toFixed().

Hedef numaranızı X basamaklı güzel bir dizeye dönüştürün ve ardından biçimlendirilmiş dizeyi bir sayıya dönüştürün.

Number( (myVar).toFixed(2) )


Aşağıdaki örneğe bakın:

var myNumber = 5.01;
var multiplier = 5;
$('#actionButton').on('click', function() {
  $('#message').text( myNumber * multiplier );
});

$('#actionButton2').on('click', function() {
  $('#message').text( Number( (myNumber * multiplier).toFixed(2) ) );
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<button id="actionButton">Weird numbers</button>
<button id="actionButton2">Nice numbers</button>

<div id="message"></div>


Güzel referans için teşekkürler.
Arman H

1

toFixed()Yöntem, sabit nokta gösterimi kullanılarak bir dizi biçimlendirir.

ve işte sözdizimi

numObj.toFixed([digits])

basamak bağımsız değişkeni isteğe bağlıdır ve varsayılan olarak 0'dır. Ve dönüş türü sayı değil dizedir. Ama kullanarak numaraya dönüştürebilirsiniz

numObj.toFixed([digits]) * 1

Ayrıca TypeError,RangeError

İşte tarayıcıdaki tüm ayrıntı ve uyumluluk.


1
let a = 0.0500
a.toFixed(2);

//output
0.05

-1

Bu işlevi yaptım. İyi çalışıyor ancak dize döndürüyor.

function show_float_val(val,upto = 2){
  var val = parseFloat(val);
  return val.toFixed(upto);
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.