Максимальное значение:
Float
равно Float.MAX_VALUE
, (2-2 ^ 23) * 2 ^ 127, что-тонапример, 3.40282346638528860e + 38 или 340 282 346 638 528 860 000 000 000 000 000 000 000,000000. Long
равно Long.MAX_VALUE
, 2 ^ 63-1 или 9 223 372 036 854 776 000.
Как раз такого родаВы занимаетесь торговым бизнесом, который не подходит для этих типов?
С плавающей точкой
На самом деле, вы не хотите Float
по той простой причине, что он основан на плавающем, и вы никогда не будете использовать деньги с плавающей точкой.Никогда не используйте плавающую точку для контекста, где важна точность.Плавающая точка меняет точность на скорость исполнения.Обычно ваши клиенты будут заботиться о деньгах.Таким образом, вы никогда не будете использовать типы float
, Float
, double
или Double
в Java для таких целей.Этот обходной путь, очевидно, подвержен путанице и ошибкам, поэтому требует тщательного документирования и кодирования.
BigDecimal
Там, где важна точность, например деньги, используйте BigDecimal
.Не потому, что он может обрабатывать большие числа, но , потому что он точен .Медленно, но точно.
Рекомендации по использованию BigDecimal
применимы только в том случае, если у вас есть небольшая сумма, например, отслеживание копеек на долларе.Если вы используете только целые числа, вам не нужно вводить BigDecimal
.
Целочисленный обходной путь для дробных сумм
Действительно, обходной путь для проблемы с плавающей запятой в языках, не имеющих альтернативы, такой как BigDecimal
, заключается в умножении всех дробных сумм до тех пор, пока они не станут целыми числами.Например, если вы ведете бухгалтерию до копейки на доллар (США), то умножьте все суммы на 100, чтобы количество целых копеек было целым числом, а не дробными долларами.
Целые числа
Что касается работы с целыми числами в Java, у вас есть несколько простых вариантов выбора .
- Для чисел 127 и менее используйте
byte
или Byte
, используя 8 бит . - Для чисел 32 767 и менее используйте
short
или Short
, используя 16 бит . - Для чисел 2 ^ 31-1 и менее (около 2 миллиардов) используйте
int
или Integer
, используя 32 бита . - Для чисел 2 ^ 63-1 именьше (около десятка миллиардов), используйте
long
или Long
, используя 64 бита . - Для еще больших чисел используйте
BigInteger
.
Как правило, лучше всего использовать наименьший целочисленный тип, который может удобно соответствовать вашим текущим значениям, а также соответствовать прогнозируемым будущим значениям.
32-разрядные или 64-разрядные типы являются основными вариантами современного оборудования.Вам не нужно беспокоиться о наименьших типах, если вы не работаете с огромным количеством этих значений или сильно ограничены в памяти.И использование BigInteger
является излишним для большинства бизнес-ориентированных приложений.(Приложения для науки и техники могут быть другой историей.)
См. Также Ответ i.merkurev в JSR 354: Деньги и валюта API библиотека.