Как округлить микро? - PullRequest
       112

Как округлить микро?

0 голосов
/ 31 октября 2018

В JavaScript, Python и, возможно, других языках, если вы округлите значение 37.305 до 2 десятичных знаков, вы получите неправильное значение:

Number(37.305).toFixed(2) => 37.30 // Should be 37.31

Одним из решений проблем точности при представлении денег является использование micros . То есть $ 1,00 => 1 000 000 микросхем.

У меня такой вопрос: как я могу округлить значение, представляющее 37,305 долларов в микро (37305000), до 2 десятичных знаков (где результат должен быть 37.31?

1 Ответ

0 голосов
/ 31 октября 2018

Округление представления (в микросхемах) R до n десятичных знаков (в представленном значении):

  • Пусть m будет 10 6− n . Это дает нам значение позиции, где мы округляем для n десятичных знаков.
  • Пусть r будет остатком R по модулю m . Например, при округлении 37305000 микро до двух десятичных разрядов m равно 10000, а r равно 5000.
  • Пусть s будет 0 или m в соответствии с желаемым правилом округления (которое не указано в вопросе). Например, для округления до ближайшего значения, если r <<em> m / 2, пусть s будет 0 (округление вниз). Если r > m / 2, пусть s будет m (округление вверх). Если r = m / 2, используйте требуемое правило для разрыва связей. Это может быть округление вверх, округление вниз или округление в зависимости от следующего старшего разряда m . Например, если правило состоит в том, чтобы округлять связи до четных, изучите последнюю цифру R / m , усеченную до целого числа. Если оно четное, установите s на 0. Если оно нечетное, установите s на m .
  • Желаемый округленный результат: R - r + s .

Вышеуказанного достаточно для неотрицательного R . Для поддержки отрицательных чисел могут потребоваться корректировки для выбора остатка и применения правила округления для выбора s . Они довольно просты, но зависят от того, какие операции остатка или операции остатка удобны в используемом языке программирования и какое правило округления желательно.

...