Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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的正确语法';什么是大十进制?_Java_Bigdecimal - Fatal编程技术网

什么';这是Java的正确语法';什么是大十进制?

什么';这是Java的正确语法';什么是大十进制?,java,bigdecimal,Java,Bigdecimal,我有两个double计数器,根据特定条件递增。计数器将增加1或.01,并将序列号1.00、1.01、1.02等的结果相加。我得到的结果类似于1.0199999999或1.111111111,这是由于双精度的性质而产生的预期条件 我尝试使用BigDecimal,虽然 BigDecimal(double val) Translates a double into a BigDecimal which is the exact decimal representation of

我有两个
double
计数器,根据特定条件递增。计数器将增加1或.01,并将序列号
1.00
1.01
1.02
等的结果相加。我得到的结果类似于
1.0199999999
1.111111111
,这是由于
双精度
的性质而产生的预期条件

我尝试使用BigDecimal,虽然

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);
来自编译器的错误消息

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
访问BigDecimal时我做错了什么?将double转换为Big Demimal的正确语法是什么?最重要的是,它将
1.019999999
转换为
1.02

BigDecimal(以及Java中的每个对象)通过
new
操作符实例化

另外,去掉构造函数中的
double
关键字,因为您已经定义了一个名为
recNo
的变量

改变

BigDecimal record = BigDecimal(double recNo);


您需要使用另一个构造函数来获得精确的精度:

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

看起来您需要复习Java OOP的基础知识。也许您可以使用一个整数并将其递增1或100。整数用于计数;)@LuiggiMendoza——我是一个老程序黑客,从刚刚开始OO的日子开始。我经常忘记,看起来像方法的东西有时可以创建一个新对象……这是一个过程。:)是的,我知道这是一个过程。我的评论目的不是对此感到不安,而是再次阅读JavaOOP概念,其中涉及如何创建类的新实例。请注意,这个问题也可能发生在另一个类上:)。
4.82
4.81999999999999960940966214906211462221108376979827880859375