带有小数位数的C#计算

本文关键字:计算 小数 | 更新日期: 2023-09-27 18:27:39

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

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

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

如何在考虑所有小数点后的情况下正确计算?

带有小数位数的C#计算

否,因为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)150 / 336) * 460)

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

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

有关详细信息:https://www.dotnetperls.com/divide