2017-09-23 64 views
1

我正在尝试使数学代码。但我做不到。十进制数学错误结果

double x = z + ((z * (25.7 - (((z - 400)/30) * 1.27)))/100); 
int d = (int) Math.round(x); 

例如,如果z = 910。 真正的数学结果是,x = 947.401,d = 947,但它不通过此代码。

你能帮我解决。

+0

或许应该明白,你是如何操作的数量,因为它看起来像你根据你的方式失去精度'尽一切努力。您应该了解有关double的整数截断和操作精度。 – JoxTraex

+0

如果'z'是整数,则表达式(z -400)/ 30中的精度将会降低。 – CAF

+0

谢谢,您向我展示了解决方案。 –

回答

2

你应该知道的优先级是如何工作的编程

  • ()高优先级
  • 然后/和*

  • - 和+

在你的问题

Th是声明z + ((z * (25.7 - (((z - 400)/30) * 1.27)))/100)将执行作为

let z = 910 

(z - 400) // result 510 
then this (z - 400)/30) // result 17 
then this (((z - 400)/30) * 1.27))) // result 21.59 
then this (25.7 - (((z - 400)/30) * 1.27)) //result 4.11 
then this (25.7 - (((z - 400)/30) * 1.27)))/100) // result 0.2159 
then this ((z * (25.7 - (((z - 400)/30) * 1.27)))/100) // result 37.401 
then this z + ((z * (25.7 - (((z - 400)/30) * 1.27)))/100) // final result 947.401 

然后,它会四舍五入的947.401,给你947

+0

谢谢,您向我展示了解决方案。 –