繁体   English   中英

java-用小数获取正确值的问题

[英]java- issue in getting correct value with decimal

我正在尝试获取准确的计算值(在我的情况下应该是66.66 ...而不是66.0),但它会打印66.0

如果我会得到66.66,则可以使用Math.round(66.66)来获得67

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

double d = (2*100)/3

请建议..

问候

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

您需要通过将操作数之一更改为double(或float)来强制进行浮点计算:

double d = (2.0*100)/3

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

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

版画

  66.66666666666667

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

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

小数点后的数字通常称为精度 因此,您所讨论的问题通常称为浮点不精确度 ,在您的情况下,您可以将其称为双点不精确度。

经验法则:

  1. 如果其中一个类型为double,则另一个将转换为double以进行算术运算,并且最终结果将为double。
  2. 否则,如果其中一个是浮点数,则另一个将转换为浮点数以进行算术运算,最终结果将是浮点数。
  3. 否则,如果其中一个类型为long类型,则另一个类型将转换为long类型以进行算术运算,并且最终结果将为long类型。
  4. 否则,两个操作数都将转换为int以进行算术运算,并且最终结果将为int。

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

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

如果需要格式化结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM