java - 如何修复java中的 double 问题

标签 java android double double-precision

<分区>

Possible Duplicate:
Java floats and doubles, how to avoid that 0.0 + 0.1 + … + 0.1 == 0.9000001?

如何克服 java android 中双倍乘法的精度问题?请注意,我正在将字符串值转换为 double 值。

例如:当我将两个 double 值相乘时:

double d1 = Double.valueOf("0.3").doubleValue() * Double.valueOf("3").doubleValue();
System.out.println("Result of multiplication : "+d1);

我得到以下结果:0.899999999999999

我得到的一些结果是。

0.6*3=1.7999999999999998;
0.2*0.2=0.04000000000000001;
etc.

我想得到以下结果而不是上面的结果。

0.3*3=0.9;
0.6*3=1.8;
0.2*0.2=0.04;

请记住,我并不是要将它四舍五入到最接近的整数。

最佳答案

你真的应该使用 java.math.BigDecimal以避免任何精度问题,并始终使用 BigDecimal(String) 构造函数。

BigDecimal result = new BigDecimal("0.3").multiply( new BigDecimal("3.0") );

关于java - 如何修复java中的 double 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8103999/

相关文章:

java - double 类型变量的赋值是否与 Java 中该变量的打印值不同?

c++ - 是否存在将 double 转换为 long long 的优雅方法?

c++ - 在 C++ 中使用 double/float 类型时如何设置精度

java - 如何在android中的不同ArrayList中存储不同的值

java - 从 InputStream 解码

java - 读取 2 个日期之间的日历事件

Android SeekBar水平翻转

java - 方法名称长度对性能有任何影响吗?

用于管理数据库外部的 BLOB 数据的 Java 框架

java - ANT 安装问题