Java 中的浮点型和双精度数据类型
2022-08-31 05:37:37
浮点数据类型是单精度 32 位 IEEE 754 浮点,双精度数据类型是双精度 64 位 IEEE 754 浮点。
这是什么意思?我什么时候应该使用浮点数而不是双倍,反之亦然?
浮点数据类型是单精度 32 位 IEEE 754 浮点,双精度数据类型是双精度 64 位 IEEE 754 浮点。
这是什么意思?我什么时候应该使用浮点数而不是双倍,反之亦然?
维基百科上的页面是一个很好的起点。
总结一下:
float
以 32 位表示,其中 1 个符号位、8 个指数位和 23 位有效位数(或科学符号数字后面的数字:2.33728*1012;33728 是有效位数)。
double
以 64 位表示,其中 1 个符号位、11 位指数和 52 位有效位数。
缺省情况下,Java 用于表示其浮点数字(因此键入文本 )。它也是数据类型,可以为您提供更大的数字范围,因此我强烈建议使用它而不是。double
3.14
double
float
可能有某些库实际上强制您使用 ,但总的来说 - 除非您可以保证您的结果足够小以适合 的规定范围,否则最好选择 。float
float
double
如果您需要准确性 - 例如,您不能有不准确的十进制值(例如),或者您正在对货币做任何事情(例如,在系统中表示$ 10.33),则使用,它可以支持任意数量的精度并优雅地处理此类情况。1/10 + 2/10
BigDecimal
浮点数为您提供大约 6-7 位小数位的精度,而双精度值则约为 15-16。此外,数字范围对于双倍也更大。
双精度型需要 8 个字节的存储空间,而浮点型只需要 4 个字节。