public class FloatError {public static void main(String[] args) { double a,b,c; a=32668.5536; b=1.1; c=a+b; System.out.println(c); }
}
package forums.sun;
import java.math.BigDecimal;
public class FloatError {
public static void main(String[] args) { BigDecimal a,b,c; a=new BigDecimal(32668.5536); b=new BigDecimal(1.1); c=a.add(b); System.out.println(c); }
}
你应该指定精度:
BigDecimal a,b,c;
a=new BigDecimal(32668.5536,MathContext.DECIMAL64);
b=new BigDecimal(1.1,MathContext.DECIMAL32);
c=a.add(b);
System.out.println(c);
如果不想指定可以用String
BigDecimal a,b,c;
a=new BigDecimal("32668.5536");
b=new BigDecimal("1.1");
c=a.add(b);
System.out.println(c);
对啊。为什么呢,两个数都是double类型啊,应该不存在精度问题啊。
a=32668.5536;
b=32668.5536;
System.out.println(c);
这样输出就:65337.1072
???
java的double和float本身就是有精度问题,要想精确,就用BigDecimal吧!
BigDecimal a,b,c;
a=new BigDecimal("32668.5536");
b=new BigDecimal("1.1");
c=a.add(b);
System.out.println(c);
使用字符串转换成BigDecimal 的方法比较好,建议使用。
浮点类型数据不适合在不容许舍入误差的金融计算领域使用。比如,
命令System.out.println(2.0-1.1)将会打印0.8999999999999999
而不是希望的0.9.这种舍入误差的产生的原因是因为浮点数实际上是用二进制系统表示的。而 分数1/10在二进制系统中没有精确的表示。
不是来骗答案然后不给分吧?