При округлении суммы валюты с использованием алгоритма для швейцарских франков учитываются вторая и третья десятичные разряды. Если меньше 26, они округляются до 0; иначе если менее 76, округляется до 5; иначе все значение округляется.
20.125 => 20.10
20.143 => 20.15
20.179 => 20.20
Что происходит, когда округленная сумма имеет более высокую десятичную точность? Все ли десятичные цифры после того, как третий просто игнорируется (значение усечено), или это значение сначала округлено каким-то другим способом до трех десятичных цифр? В качестве примера рассмотрим усечение по сравнению с подходом "Math.round()" (менее 0,5 раунда вниз, еще округление):
Truncation | "Math.round"
=================================================================
Start 3 d.p. Rounded | Start 3 d.p. Rounded
=================================================================
20.1259 -> 20.125 => 20.10 | 20.1259 -> 20.126 => 20.15
20.1759 -> 20.175 => 20.15 | 20.1759 -> 20.176 => 20.20
Как видно из вышеизложенного, эти крайние случаи сильно изменяются в конечном результате.
Аргентинское округление валюты следует аналогичной модели, которая касается только третьей десятичной цифры. Хотя округленный результат может иметь два или три десятичных знака, применяется тот же принцип; если значение, которое нужно округлить, имеет четыре или более десятичных цифры, должен ли алгоритм просто урезать что-либо после третьей цифры или должен ли он применить какое-то другое промежуточное округление, чтобы получить результат с тремя знаками после запятой?
Спасибо!