Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 浮点除以1000时数据丢失_Java - Fatal编程技术网

Java 浮点除以1000时数据丢失

Java 浮点除以1000时数据丢失,java,Java,我有一个浮子 float data = 24931192; 当我把它除以1000 data = data / 1000; 它还给我24931.191。谁能告诉我为什么?我怎样才能预防呢? 谢谢你浮点数/浮点数只有这么高的精度(准确地说,在Java中是23位的精度),而你刚刚遇到了一个精度不够的问题。如果浮点数不够,请尝试使用double,尽管即使这些浮点数最终也会遇到问题。浮点数据类型没有无限精度,因此您会看到类似这样的小问题。一个选项(如果您真的想要浮点结果)是以双精度执行操作,然后强制转

我有一个浮子

float data = 24931192;
当我把它除以1000

data = data / 1000;
它还给我24931.191。谁能告诉我为什么?我怎样才能预防呢?
谢谢你

浮点数/浮点数只有这么高的精度(准确地说,在Java中是23位的精度),而你刚刚遇到了一个精度不够的问题。如果浮点数不够,请尝试使用double,尽管即使这些浮点数最终也会遇到问题。

浮点数据类型没有无限精度,因此您会看到类似这样的小问题。一个选项(如果您真的想要浮点结果)是以双精度执行操作,然后强制转换为浮点。另一个选项是使用BigDecimal而不是float。浮点值(
float
double
)是近似值。您可能会看到舍入错误,实际上不可能精确地表示某些值。想想
1/3=0.333333…
:最终,数字的存储槽用完了,您最终得到了“(1/3)*3=0.999999…”


大多数用法不需要足够精确的答案,只需要一个
double
。如果需要,请查看
BigDecimal
,这要慢得多。

浮点的精度有限。在这里,您可以阅读有关浮点编码方式的更多信息:


如果您关心精度,您应该使用BigDecimal:

使用
java.math.BigDecimal
类型。浮点数的精度不是无限的。最终您总会遇到此类问题。有关更全面的讨论,请参阅。