我在C#中遇到基本的乘法和除法问题。
对于((150/336)* 460)它返回0但答案应该是205.357142857.
我认为这是因为(150/336)是一个小数,而C#将其舍入为0。
如何在考虑所有小数位的情况下正确计算?
答案 0 :(得分:11)
不,这是因为150/336是一个整数除法,它总是截断小数部分,因为结果也是int
。
所以两者中的一个必须是十进制数字:
double d = 150d / 336;
该除法将结果舍入为零,且绝对值为 结果是最大可能的整数小于 两个操作数的商的绝对值。结果为零 当两个操作数具有相同的符号且为0或0时为正 当两个操作数具有相反的符号时为负。
答案 1 :(得分:5)
((150 / 336) * 460)
这些数字是整数,它们没有小数位。由于150 / 336
在整数数学中求值为0
,因此将其乘以任何值也会产生0
。
您需要明确地将每个数字设为双精度数。像这样:
((150d / 336d) * 460d)
答案 2 :(得分:4)
你正在做整数运算而不是浮动/双重。要指定浮点双常量,请使用'd'后缀。
double d = (150d / 336d) * 460d;
答案 3 :(得分:2)
150/336给你一个int作为结果,因此你需要分区,所以你得到一个双倍的结果
(((double)150 / 336) * 460)
答案 4 :(得分:1)
如果您正在使用变量,那么您应该将其写下来:
double d = ((double)firstNumber/ secondNumber) * thirdNumber;