JavaScript wyświetla liczbę zmiennoprzecinkową do 2 miejsc po przecinku

315

Chciałem wyświetlić liczbę z dokładnością do 2 miejsc po przecinku.

Myślałem, że mogę użyć toPrecision(2)w JavaScript.

Jednak jeśli numer jest 0.05, dostaję 0.0500. Wolałbym, żeby pozostało tak samo.

Zobacz to na JSbin .

Jak najlepiej to zrobić?

Mogę pomyśleć o kodowaniu kilku rozwiązań, ale wyobrażam sobie (mam nadzieję), że coś takiego jest wbudowane?

alex
źródło

Odpowiedzi:

559
float_num.toFixed(2);

Uwaga:toFixed() będzie zaokrąglać lub uzupełniać zerami, jeśli to konieczne, aby osiągnąć określoną długość.

Jason McCreary
źródło
61
Ale zwraca ciąg, a nie pływak!
Anwar
38
Autor pytania chce go „wyświetlić”, więc łańcuch jest idealny
Christophe Marois
7
I zawsze możesz użyć parseFloat (float_num.toFixed (2)), aby przekonwertować ciąg z powrotem na float, zachowując tylko dwa miejsca po przecinku.
Hankrecords,
3
@w warstwie nie można niezawodnie zaokrąglić liczby zmiennoprzecinkowej (prawdopodobnie można w ogóle zaokrąglić liczbę zmiennoprzecinkową) - otrzymasz coś w rodzaju 0,0500 lub nawet 0,0500000000001. Zobacz floating-point-gui.de
jmc
2
@Hankrecords to, co powiedziałeś, nie jest prawdą. Jeśli mam '43 .01 'i analizuję, to otrzymuję 43,01 ALE jeśli mam '43 .10', dostanę 43.1: D nie to, czego chcę.
Lucian Tarna
50

Można to zrobić za pomocą tej toFixedfunkcji, ale w IE jest ona wadliwa . Jeśli chcesz niezawodnego rozwiązania, spójrz na moją odpowiedź tutaj .

Elias Zamaria
źródło
26
Technologia powinna być rozwijana zamiast dostosowywać się do IE ... (btw. W węźle js float_num.toFixed(2);działa dobrze)
fider
14

Nie wiem, jak dostałem się do tego pytania, ale nawet jeśli minęło wiele lat, odkąd zostało zadane, chciałbym dodać szybką i prostą metodę, którą stosuję i nigdy mnie nie zawiódł:

var num = response_from_a_function_or_something();

var fixedNum = parseFloat(num).toFixed( 2 );
panoramy
źródło
1
Dlaczego parseFloat()tam Należy go używać tylko wtedy, gdy liczba pochodzi z ciągu.
alex
3
W niektórych przypadkach, gdy otrzymuję wartość atrybutu „data-” z jquery z elementu, jeśli użyję tylko toFixed, spowoduje to błąd. parseFloat naprawia to.
panos,
2
Tak, o to mi chodziło wyżej, jeśli pochodzi z łańcucha . Ale korzystanie z niego zawsze jest złą radą.
alex
8

number.parseFloat(2) działa, ale zwraca ciąg znaków.

Jeśli chcesz zachować ten typ liczbowy, możesz użyć:

Math.round(number * 100) / 100

rnmalone
źródło
4

Możesz spróbować miksowania Number()itoFixed() .

Przekształć liczbę docelową na ładny ciąg z cyframi X, a następnie przekonwertuj sformatowany ciąg na liczbę.

Number( (myVar).toFixed(2) )


Zobacz przykład poniżej:

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>

George-Paul B.
źródło
Dziękuję za miłe referencje.
Arman H
1

toFixed()Sposób formatuje numer za pomocą notacji dziesiętnej.

a oto składnia

numObj.toFixed([digits])

Argument cyfry jest opcjonalny i domyślnie wynosi 0. Zwracanym typem jest łańcuch, a nie liczba. Ale możesz przekonwertować go na liczbę za pomocą

numObj.toFixed([digits]) * 1

To również może generuje wyjątki podoba TypeError,RangeError

Oto pełny szczegół i zgodność w przeglądarce.

Sunil Garg
źródło
1
let a = 0.0500
a.toFixed(2);

//output
0.05
Rizo
źródło
-1

Zrobiłem tę funkcję. Działa dobrze, ale zwraca ciąg.

function show_float_val(val,upto = 2){
  var val = parseFloat(val);
  return val.toFixed(upto);
}
Syed Nurul Islam
źródło