java-使用十进制获取正确值时的问题
我试图得到精确的计算值(在我的例子中,它应该是66.66…不是66.0),但它打印的是66.0 如果我得到66.66,那么我可以使用数学。四舍五入(66.66),这样我就得到67 执行后的以下代码应返回66.66,但返回66.0java-使用十进制获取正确值时的问题,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执行整数乘法和除法,从而得到一个整数 您需要通过将其中一个操作数更改为双精度(
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:您得到答案了吗?如果没有,请写下您的答案,以便其他人可以从中受益@辛:你得到你的答案了吗?如果没有,请写下你的答案,这样其他人可以从中受益。