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

时间:2015-07-01 13:15:36

标签: java

我想获得精确的计算值(在我的情况下它应该是66.66 ...而不是66.0)但它打印66.0

如果我得到66.66那么我可以使用Math.round(66.66)以便我得到67

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

param

请建议..

此致

4 个答案:

答案 0 :(得分:3)

ip执行整数乘法和除法,得到一个整数。

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

(2*100)/3

答案 1 :(得分:1)

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

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

打印

  66.66666666666667

答案 2 :(得分:0)

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

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

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

经验法则

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

答案 3 :(得分:0)

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

那样执行

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

如果需要格式化结果。