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,但它不通过此代码。
你能帮我解决。
我正在尝试使数学代码。但我做不到。十进制数学错误结果
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,但它不通过此代码。
你能帮我解决。
你应该知道的优先级是如何工作的编程
然后/和*
- 和+
在你的问题
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
谢谢,您向我展示了解决方案。 –
或许应该明白,你是如何操作的数量,因为它看起来像你根据你的方式失去精度'尽一切努力。您应该了解有关double的整数截断和操作精度。 – JoxTraex
如果'z'是整数,则表达式(z -400)/ 30中的精度将会降低。 – CAF
谢谢,您向我展示了解决方案。 –