Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.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 - Fatal编程技术网

java-使用十进制获取正确值时的问题

java-使用十进制获取正确值时的问题,java,Java,我试图得到精确的计算值(在我的例子中,它应该是66.66…不是66.0),但它打印的是66.0 如果我得到66.66,那么我可以使用数学。四舍五入(66.66),这样我就得到67 执行后的以下代码应返回66.66,但返回66.0 double d = (2*100)/3 请建议 关于(2*100)/3执行整数乘法和除法,从而得到整数 您需要通过将其中一个操作数更改为双精度(或浮点)来强制浮点计算: (2*100)/3执行整数乘法和除法,从而得到一个整数 您需要通过将其中一个操作数更改为双精度(

我试图得到精确的计算值(在我的例子中,它应该是66.66…不是66.0),但它打印的是66.0

如果我得到66.66,那么我可以使用数学。四舍五入(66.66),这样我就得到67

执行后的以下代码应返回66.66,但返回66.0

double d = (2*100)/3
请建议

关于

(2*100)/3
执行整数乘法和除法,从而得到整数

您需要通过将其中一个操作数更改为双精度(或浮点)来强制浮点计算:

(2*100)/3
执行整数乘法和除法,从而得到一个整数

您需要通过将其中一个操作数更改为双精度(或浮点)来强制浮点计算:


在算术运算中使用所有int值,因此最终结果始终为int,当您将其放入double时,它将变为66.0。但由于原始结果是int,所以您失去了精度

您可以使用
double d=(2.0*100.0)/3.0或至少有一个带小数点的值,以便可以获得预期的小数点

小数点后的数字通常称为精度。因此,您提到的问题通常被称为浮点不精确性,在您的例子中,您可以将其称为双点不精确性

经验法则:

  • 如果其中一个是double类型,则另一个将转换为double进行算术运算,最终结果将是double
  • 否则,如果其中一个是浮点,则另一个将转换为浮点进行算术运算,最终结果将是浮点
  • 否则,如果其中一个为long类型,则另一个将转换为long进行算术运算,最终结果将为long
  • 否则,两个操作数都将转换为整数进行算术运算,最终结果将是整数

  • 在算术运算中使用所有int值,因此最终结果始终为int,当您将其放入double时,它将变为66.0。但由于原始结果是int,所以您失去了精度

    您可以使用
    double d=(2.0*100.0)/3.0或至少有一个带小数点的值,以便可以获得预期的小数点

    小数点后的数字通常称为精度。因此,您提到的问题通常被称为浮点不精确性,在您的例子中,您可以将其称为双点不精确性

    经验法则:

  • 如果其中一个是double类型,则另一个将转换为double进行算术运算,最终结果将是double
  • 否则,如果其中一个是浮点,则另一个将转换为浮点进行算术运算,最终结果将是浮点
  • 否则,如果其中一个为long类型,则另一个将转换为long进行算术运算,最终结果将为long
  • 否则,两个操作数都将转换为整数进行算术运算,最终结果将是整数

  • 正如其他答案所建议的,您可以提供至少一个浮点数。或者,如果不想更改数字,可以在分子中添加强制转换

    double d=   (double)(2*100)/3;
    System.out.println(d); 
    
    印刷品

      66.66666666666667
    

    正如其他答案所建议的,您可以提供至少一个浮点数。或者,如果不想更改数字,可以在分子中添加强制转换

    double d=   (double)(2*100)/3;
    System.out.println(d); 
    
    印刷品

      66.66666666666667
    

    正如Eran所说,执行整数运算需要执行如下操作

    double d=(double)(2*100)/3


    如果需要格式化结果。

    正如Eran所说,这是您的表达式执行整数运算,您需要执行类似的运算

    double d=(double)(2*100)/3


    如果需要格式化结果。

    可能重复的可能重复您实际上并没有将结果转换为
    双精度
    ,而是将分子(例如
    (2*100)
    )转换为
    双精度
    @user700390:是。非常感谢。更正了。我正在尝试(2*100/3),但没有使用类型转换(双精度)。我认为这就是问题所在。double d=(double)(2*100)/3返回预期结果。您实际上并没有将结果转换为
    double
    ,而是将分子(例如
    (2*100)
    )转换为
    double
    @user700390:是。非常感谢。更正了。我正在尝试(2*100/3),但没有使用类型转换(双精度)。我认为这就是问题所在。double d=(double)(2*100)/3返回预期结果。@SSingh:您得到答案了吗?如果没有,请写下您的答案,以便其他人可以从中受益@辛:你得到你的答案了吗?如果没有,请写下你的答案,这样其他人可以从中受益。