Округлення чисел до 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.