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