JavaScript, що відображає поплавок до 2 знаків після коми


315

Я хотів відобразити число до 2 знаків після коми.

Я думав, що можу використовувати toPrecision(2)в JavaScript.

Однак якщо число є 0.05, я отримую 0.0500. Я вважаю за краще, щоб він залишився колишнім.

Дивіться це на JSbin .

Який найкращий спосіб зробити це?

Я можу подумати про кодування кількох рішень, але я б уявив (сподіваюся), що щось подібне вбудовано?

Відповіді:


559
float_num.toFixed(2);

Примітка:toFixed() якщо потрібно, буде округлена або прокладена нулями, щоб відповідати заданій довжині.


61
Але він повертає рядок, а не плаває!
Анвар

38
Автор запитання хоче "відобразити" його, тому рядок ідеальною
Крістоф Маруа

7
І ви завжди можете використовувати parseFloat (float_num.toFixed (2)) для перетворення рядка назад у плаваючий, зберігаючи лише два десяткові числа.
Hankrecords

3
@anwar ви не можете надійно обігнути поплавок (можливо, ви можете взагалі закрутити поплавок) - ви отримаєте щось на зразок 0,0500 або навіть 0,0500000000001. Дивіться floating-point-gui.de
jmc

2
@Hankrecords те, що ви сказали, не відповідає дійсності. Якщо у мене '43 .01 'і я розбираю Floloat, то я отримую 43.01, але якщо у мене '43 .10', я отримаю 43.1: D не те, що я хочу.
Лучан Тарна

50

Ви можете це зробити за допомогою toFixedфункції, але в IE це баггі . Якщо ви хочете надійного рішення, дивіться мою відповідь тут .


26
Технології слід розвивати, а не пристосовувати до IE ... (btw. У вузлі js float_num.toFixed(2);працює чудово)
fider


14

Не знаю, як я дійшов до цього питання, але навіть якщо минуло багато років з моменту цього, я хотів би додати швидкий і простий метод, який я дотримуюся, і він ніколи мене не підводив:

var num = response_from_a_function_or_something();

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

1
Чому саме parseFloat()там? Його слід використовувати лише в тому випадку, якщо число походить із рядка.
alex

3
У деяких випадках, коли я отримую якесь значення атрибута "data" з jquery від елемента, якщо я використовую лише toFixed, це створює помилку. parseFloat виправляє його.
panos

2
Так, це я мав на увазі вище, якщо це походить із струни . Але використовувати його завжди є поганою порадою.
alex


8

number.parseFloat(2) працює, але він повертає рядок.

Якщо ви хочете зберегти його як тип номера, ви можете використовувати:

Math.round(number * 100) / 100


4

Ви можете спробувати змішати Number()і toFixed().

Перетворіть цільовий номер у хороший рядок із X цифрами, а потім перетворіть відформатований рядок у число.

Number( (myVar).toFixed(2) )


Дивіться приклад нижче:

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>


Дякуємо за приємну довідку.
Арман Н

1

toFixed()Метод форматує число з використанням нотації з фіксованою точкою.

і ось синтаксис

numObj.toFixed([digits])

Аргумент цифр необов’язковий і за замовчуванням дорівнює 0. А тип повернення - рядок не число. Але ви можете перетворити його в число за допомогою

numObj.toFixed([digits]) * 1

Він також може викидати такі винятки TypeError ,RangeError

Ось повна деталізація та сумісність у браузері.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.