Мы используем double
.
* Удушье *
Зачем?
Потому что он может представлять любое 15-значное число без каких-либо ограничений на то, где находится десятичная точка . Все за жалкие 8 байтов!
Так что это может представлять:
0.123456789012345
123456789012345.0
... и все что между
Это полезно, потому что мы имеем дело с глобальными валютами и double
можем хранить различное количество десятичных разрядов, с которыми мы, вероятно, столкнемся.
Один double
поле может представлять 999,999,999,999,999s в японских йенах, 9,999,999,999,999.99s в долларах США и даже 9,999,999.99999999s в Bitcoins
Если вы попытаетесь сделать то же самое с decimal
, вам нужно, decimal(30, 15)
что стоит 14 байтов.
Предостережения
Конечно, использование double
не без предостережений.
Тем не менее, это не потеря точности, как указывают некоторые. Даже если double
сам по себе он не может быть внутренне точным для системы base 10 , мы можем сделать его точным, округлив значение, которое мы извлекаем из базы данных, до ее значащих десятичных разрядов. При необходимости это так. (Например, если он будет выведен, и требуется представление базы 10).
Предостережения: всякий раз, когда мы выполняем с ним арифметику, нам нужно нормализовать результат (округляя его до значащих десятичных разрядов) перед:
- Выполнение сравнений на нем.
- Запись его обратно в базу данных.
Еще один вид предостережения: в отличие от того, decimal(m, d)
где база данных будет препятствовать программам вставлять число, состоящее более чем из m
цифр, таких проверок не существует double
. Программа может вставить введенное пользователем значение из 20 цифр, и в итоге она будет записана в виде неточной суммы.
deimal(10,2)
это то, что я использую ... вы можете настроить значения в зависимости от ожидаемого размера