当它应该是0.0x时,十进制值为零

时间:2010-03-15 19:47:47

标签: c# decimal division

如果之前已经谈过,我很抱歉,我很难在此搜索。

我正在计算折旧率。我们计算的一部分是1 /月的寿命。我的表将此数据存储在decimal字段中。我尝试了test = 1 / estimatedLife;,但test(定义为decimal)的计算结果为0.

假设估计寿命为36个月。所以1/36应该等于0.02777778。

对我做错了什么的想法?

顺便说一下,我将test更改为双倍,并得到了相同的结果。

5 个答案:

答案 0 :(得分:5)

尝试:

test = 1.0M / estimatedLife;

答案 1 :(得分:5)

另一个内置替代方案是Decimal.Divide

test = Decimal.Divide(1, estimatedLife);

更多要写,但我会说非常明确。

答案 2 :(得分:2)

您的代码将两个整数分开,然后将结果(也是一个整数)分配给decimal变量。

您需要至少将其中一个操作数设为decimal切换到decimal除法,如下所示:1.0M / estimatedLife

答案 3 :(得分:2)

估计生命是一个int,不是吗。试试这个:

    decimal test = 1 / (decimal) estimatedLife;

或使用SwDevMan81的建议:

    test = 1.0M / estimatedLife;

问题是整数除法会丢弃小数点后的所有内容。其中一个参数必须是小数才能得到你想要的结果。

他在评论中发布的documentation link说:

  

如果要将数字实数文字视为十进制,请使用后缀m或M

所以1.0M表示“一个十进制类型的文字,值为1.0”

答案 4 :(得分:2)

只是要添加,如果你需要特定的精度(我注意到你的输出设置为8位小数)你可以使用

decimal test = Math.Round(1M / estimatedLife,8);