我有两个double
个计数器,我根据某些标准递增。计数器将递增1或.01,结果汇总为序列号1.00
,1.01
,1.02
等。我得到的结果如{{1 }}或1.01999999999
,由1.111111111111
的性质引起的预期条件。
我正在尝试使用BigDecimal,虽然Java Documentation表示
double
我无法让代码工作。
BigDecimal(double val)
Translates a double into a BigDecimal which is the exact decimal representation of the double's binary floating-point value.
来自编译器的错误消息
....
if (condition1) {
indexNo = indexNo + 1;
subIndexNo = .00;
} else
if (condition2) {
subIndexNo = subIndexNo + .01;
}
recNo = indexNo + subIndexNo;
BigDecimal record = BigDecimal(double recNo);
访问BigDecimal时我做错了什么?将double转换为Big Demimal的正确语法是什么,最重要的是,它会将C:\pathtojava\sync\java\bin>javac ParseWhiData.java
ParseWhiData.java:97: error: '.class' expected
BigDecimal record = BigDecimal(double recNo);
^
ParseWhiData.java:97: error: ';' expected
BigDecimal record = BigDecimal(double recNo);
^
2 errors
转换为1.019999999999
答案 0 :(得分:5)
BigDecimal(以及Java中的每个对象)都是通过new
运算符实例化的。
此外,摆脱构造函数中的double
关键字,因为您已经定义了一个名为recNo
的变量。
更改
BigDecimal record = BigDecimal(double recNo);
到
BigDecimal record = new BigDecimal(recNo);
答案 1 :(得分:3)
您需要使用其他构造函数BigDecimal(String val)
来获得精确的精度:
BigDecimal a = new BigDecimal("4.81");
BigDecimal b = new BigDecimal("0.01");
BigDecimal c = a.add(b);
System.out.println(c);
BigDecimal d = new BigDecimal(4.81);
BigDecimal e = new BigDecimal(0.01);
BigDecimal f = d.add(e);
System.out.println(f);
<强>输出:强>
4.82
4.81999999999999960940966214906211462221108376979827880859375