Хорошо ли работают современные реализации с плавающей точкой? - PullRequest
2 голосов
/ 04 февраля 2012

Я определенно обращаюсь с большим количеством денежных значений.Каждое значение является точным только до 2 десятичных знаков .Но значения будут передаваться базой данных и одной или несколькими веб-платформами, и будут выполняться арифметические операции.

Стоит ли настаивать на десятичных типах данных для чисел, для которых требуется только 2 места точности?Или современные реализации с плавающей запятой надежны и стандартизированы, чтобы избежать этого?

Ответы [ 2 ]

8 голосов
/ 06 февраля 2012

Черт, нет, абсолютно, и вопросы ортогональны, в этом порядке. : -)

Числа с плавающей запятой, особенно в двоичном виде, никогда не являются правильным выбором для количеств с фиксированной запятой, в наименьшей степени из тех, которые ожидают точных дробей, таких как денежные значения. Прежде всего, они не точно выражают все значения центов (или любого другого дробного компонента), так же как десятичные числа фиксированной длины не могут правильно выражать 1/3. Во-вторых, сложение или вычитание маленьких и очень больших чисел с плавающей запятой не всегда дает ожидаемый результат из-за различий в «значимости».

Десятичные числа - это способ расчета валют. Если вам абсолютно необходимо использовать двоичные числа, используйте масштабированные двоичные числа с фиксированной запятой - например, вычислите все в 1/100 вашей валютной единицы и используйте двоичные целые числа, чтобы сделать это.

Наконец, это не имеет ничего общего с «надежностью» или «стандартизацией» - оно имеет все, что нужно для выбора типа данных, который соответствует вашим данным.

1 голос
/ 04 февраля 2012

Нет, они не достаточно точны.Подробнее см. направляющую с плавающей запятой .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...