Java 中的浮点型和双精度数据类型

2022-08-31 05:37:37

浮点数据类型是单精度 32 位 IEEE 754 浮点,双精度数据类型是双精度 64 位 IEEE 754 浮点。

这是什么意思?我什么时候应该使用浮点数而不是双倍,反之亦然?


答案 1

维基百科上的页面是一个很好的起点。

总结一下:

  • float以 32 位表示,其中 1 个符号位、8 个指数位和 23 位有效位数(或科学符号数字后面的数字:2.33728*1012;33728 是有效位数)。

  • double以 64 位表示,其中 1 个符号位、11 位指数和 52 位有效位数。

缺省情况下,Java 用于表示其浮点数字(因此键入文本 )。它也是数据类型,可以为您提供更大的数字范围,因此我强烈建议使用它而不是。double3.14doublefloat

可能有某些库实际上强制您使用 ,但总的来说 - 除非您可以保证您的结果足够小以适合 的规定范围,否则最好选择 。floatfloatdouble

如果您需要准确性 - 例如,您不能有不准确的十进制值(例如),或者您正在对货币做任何事情(例如,在系统中表示$ 10.33),则使用,它可以支持任意数量的精度并优雅地处理此类情况。1/10 + 2/10BigDecimal


答案 2

浮点数为您提供大约 6-7 位小数位的精度,而双精度值则约为 15-16。此外,数字范围对于双倍也更大。

双精度型需要 8 个字节的存储空间,而浮点型只需要 4 个字节。