带小数位的C#计算

时间:2013-08-14 22:51:47

标签: c#

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

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

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

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

5 个答案:

答案 0 :(得分:11)

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

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

double d = 150d / 336;

请参阅:7.7.2 Division operator

  

该除法将结果舍入为零,且绝对值为   结果是最大可能的整数小于   两个操作数的商的绝对值。结果为零   当两个操作数具有相同的符号且为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;

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