1

我在 C# 中遇到了基本的乘法和除法问题。

它为 ((150 / 336) * 460) 返回 0,但答案应该是 205.357142857。

我认为这是因为 (150/336) 是一个小数,而 C# 将其四舍五入为 0。

考虑到所有小数位,我如何正确计算?

4

5 回答 5

11

不,这是因为 150/336 是一个整数除法,它总是截断小数部分,因为结果也将是int.

所以两者之一必须是十进制数:

double d = 150d / 336;

参见:7.7.2 除法运算符

除法将结果向零舍入,结果的绝对值是小于两个操作数的商的绝对值的最大可能整数。当两个操作数具有相同符号时,结果为零或正,当两个操作数具有相反符号时,结果为零或负。

于 2013-08-14T22:54:07.850 回答
5
((150 / 336) * 460)

这些数字是整数,没有小数位。由于在整数数学中150 / 336计算为0,因此将其乘以任何值也将导致0.

您需要明确地将每个数字设为双精度数。像这样的东西:

((150d / 336d) * 460d)
于 2013-08-14T22:54:38.027 回答
4

你正在做整数运算而不是浮点/双精度。要指定浮点双常量,请使用“d”后缀。

double d = (150d / 336d) * 460d;
于 2013-08-14T22:53:41.910 回答
2

150/336 给你一个 int 作为结果,因此为 0。你需要除法,所以你会有一个 double 作为结果

(((double)150 / 336) * 460)
于 2013-08-14T22:57:55.777 回答
1

如果你使用变量,那么你应该像这样写下来:

double d = ((double)firstNumber/ secondNumber) * thirdNumber;

欲了解更多信息:https ://www.dotnetperls.com/divide

于 2017-10-20T13:58:45.880 回答