Округлення чисел до 2 цифр після коми


83

Я не уявляю, як це зробити? Я додаю номери коми, результат, звичайно, завжди є числом із занадто великою кількістю цифр після коми. хто-небудь?


1
Для деяких мов коми замінюються крапками.
DOK

@Matt - це частина плагіна jParseFloat, вона буде частиною ядра jQuery через 1.5!
Нік Кравер

Відповіді:


107

РЕДАКТУВАТИ 2 :

Використовуйте метод Numberоб'єкта toFixedтак:

var num = Number(0.005) // The Number() only visualizes the type and is not needed
var roundedString = num.toFixed(2);
var rounded = Number(roudedString); // toFixed() returns a string (often suitable for printing already)

Він округляє 42.0054321 до 42.01

Округлюється від 0,005 до 0,01

Округлюється від -0,005 до -0,01 (Отже, абсолютне значення збільшується при округленні на кордоні .5)

Приклад jsFiddle


1
@Sten - кома чи десятковий знак? Ваше питання та приклад не згодні.
Нік Кравер

11
Цей приклад не працює, якщо ви хочете насправді округлити число, скажімо, 0,007 до двох знаків після коми. Результат цього: Math.round (0,007) -> 0,000, а потім Fixed (2) -> 0,00. Фактичний процес округлення повинен становити 0,01.
Андрій

9
downvote: відповідь неправильна, оскільки Math.round () округлює число, тим самим видаляючи всі десяткові знаки. Тоді все toFixed (2) додає два кінцеві нулі. Просто номер.toFixed (2) підійде.
HammerNL

1
Потрібно щось зробити, оскільки ця відповідь неправильна, і інші люди можуть не читати коментарі, перш ніж сліпо використовувати прийняту відповідь.
Педро Морейра,

1
-1: 3.1415стає 3.00у вашому прикладі.

102

ОНОВЛЕННЯ: Майте на увазі, що на момент написання відповіді у 2010 році функція нижче Fixed () працювала дещо інакше. toFixed (), здається, зараз робить деяке округлення, але не строго математично. Тому будьте обережні з цим. Виконайте свої тести ... Метод, описаний нижче, буде добре округляти, як очікував математик.

  • toFixed()- метод перетворює число в рядок, зберігаючи задану кількість десяткових знаків. Це фактично не округлює число, воно скорочує число.
  • Math.round(n)- округлює число до найближчого цілого числа. При цьому обертаючись:

0,5 -> 1; 0,05 -> 0

тому, якщо ви хочете округлити, скажімо число 0,55555, лише до другого десяткового знака; Ви можете зробити наступне (це поетапна концепція):

  • 0.55555 * 100 = 55,555
  • Math.Round(55.555) -> 56.000
  • 56.000 / 100 = 0,56000
  • (0.56000).toFixed(2) -> 0,56

і це код:

(Math.round(number * 100)/100).toFixed(2);

Я використовую той самий метод. Чудово працює
Індіана Кернік

Викликали проблеми для прикладів, коли у вас вже є плаваюча фраза з потрібними цифрами після коми, наприклад> (Math.round (123.12124 * 100) / 100) .toFixed (4); ===> 123.1200
Алендорф

1
Ви забули змінити математику округлення, наприклад: Math.round (123.12124 * 10000) / 10000) .toFixed (4). Це якщо ви хочете округлити до 4-го знака після коми.
Андрій

Помилка: toFixed () робить округлення числа, тому це не є усіченням. Див. Developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
MikeB

Не проходить 1.005
Лен Джозеф

55

Це спрацювало для мене:

var new_number = float.toFixed(2);

Приклад:

var my_float = 0.6666

my_float.toFixed(3) # => 0.667

Я думаю, що проблема в цьому полягає в тому, що він не "округляє" число, тому 0.6666.toFixed(3)стає 0.666замість 0.667. Здається, @Andrei має правильне рішення для правильного округлення.
Джошуа Пінтер

1
Ха! Не зважай. Я просто перевіряв і toFixed()працює відмінно: 0.6666.toFixed(3) # => 0.667. Я додаю його до вашої відповіді.
Джошуа Пінтер

3
Найкоротший і найкращий. Це має бути прийнятою відповіддю.

12

Попередні відповіді забули знову ввести результат як число. Існує кілька способів зробити це, залежно від вашого смаку.

+my_float.toFixed(2)

Number(my_float.toFixed(2))

parseFloat(my_float.toFixed(2))

1
На мою думку, це найкраща відповідь. Це просто, коротко, і його результат - НОМЕР
Kar.ma

Мені подобається позначення "+", дуже елегантно
Jibeee

5

Це насправді не зручно для процесора, але:

Math.round(number*100)/100

працює, як очікувалося.


2

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

function roundToTwoDigitsAfterComma(floatNumber) {
    return parseFloat((Math.round(floatNumber * 100) / 100).toFixed(2));
}

Про всяк випадок, якщо вас цікавить, як це працює:

  1. Помножте на 100, а потім зробіть округлення, щоб зберегти точність до 2 цифр після коми
  2. Поділіть назад на 100 і використовуйте, toFixed(2)щоб зберегти 2 цифри після коми та кинути іншу некорисну частину
  3. Перетворіть його назад у плаваючий, використовуючи замість цього parseFloat()функцію як toFixed(2)рядок повернення

Примітка. Якщо ви зберігаєте останні дві цифри після коми через роботу з грошовими значеннями та виконуєте фінансові розрахунки, майте на увазі, що це не є гарною ідеєю, і вам краще використовувати цілі значення.


1

скористайтеся наведеним нижче кодом.

alert(+(Math.round(number + "e+2")  + "e-2"));

2
Ця відповідь робить по суті те саме, що й інші відповіді на це 7-річне запитання, але дуже неясно, використовуючи неявні перетворення типу javascript. Які якості цього коду переконали вас розмістити його тут?
u354356007

Якість цієї відповіді полягає в тому, що це змусило мене дізнатися щось нове, чого я не знав про JS ;-)
Деблатон Жан-Філіпп

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