在java中添加非常小的值

joh*_*4ta 1 java

我目前正在研究java中的一个程序,它需要在一个双变量ex中添加一个小的常量值,如0.00000000001.地点.但是,当我运行代码,调试它,并到达我将0.00000000001添加到位置的位置,并在添加发生后检查调试模式中的位置值.看来该位置没有添加0.00000000001.例如,位置在添加前等于438.0,在添加后等于438.0.以下是简单代码的示例

location + = 0.00000000001

有任何想法吗?提前致谢.

Lai*_*Chu 6

由于Java的存储方式,许多双精度值在Java中并不完全精确.精确精度仅适用于某些值.这是因为Java只能存储十进制值作为许多2 ^ n(s)的组合.

例如:1/4可以存储为2^-2,但1/3将存储为2^-2 + 2^-3+ 2^-4 +2^-5...,因此1/3是一个不完全精确的值的示例

如果需要精确值,请使用以下BigDecimal类:

http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html


Kaz*_*ara 5

您需要使用BigDecimal以获得更好的精度.

例:

BigDecimal test = new BigDecimal(438.0);
test = test.add(new BigDecimal(0.0000000000001));
System.out.println(test);
Run Code Online (Sandbox Code Playgroud)