带小数位的C#计算

Tre*_*art 1 c#

我在C#中基本乘法和除法遇到了麻烦.

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

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

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

Tim*_*ter 11

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

所以两者中的一个必须是十进制数:

double d = 150d / 336;
Run Code Online (Sandbox Code Playgroud)

见:7.7.2分部操作员

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


Dav*_*vid 5

((150 / 336) * 460)
Run Code Online (Sandbox Code Playgroud)

这些数字是整数,它们没有小数位.由于150 / 336求值为0整数数学,因此将其乘以任何东西也会产生0.

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

((150d / 336d) * 460d)
Run Code Online (Sandbox Code Playgroud)