1

如果之前讨论过这个,对不起,我很难搜索到这个。

我正在计算折旧率。我们计算的一部分是 1/生命(以月为单位)。我的表将这些数据存储在一个decimal字段中。我试过了,但是(定义为 a )test = 1 / estimatedLife;的计算结果是 0。testdecimal

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

有什么想法我做错了吗?

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

4

5 回答 5

5

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

test = Decimal.Divide(1, estimatedLife);

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

于 2010-03-15T19:53:39.517 回答
5

尝试:

test = 1.0M / estimatedLife;
于 2010-03-15T19:49:30.677 回答
2

估计生命是一个整数,不是吗。尝试这个:

    decimal test = 1 / (decimal) estimatedLife;

或使用 SwDevMan81 的建议:

    test = 1.0M / estimatedLife;

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

他在评论中发布的文档链接说:

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

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

于 2010-03-15T19:51:41.567 回答
2

只是补充一下,如果您需要特定的精度(我注意到您的输出设置为 8 位小数),您可以使用

decimal test = Math.Round(1M / estimatedLife,8);
于 2010-03-15T19:59:15.063 回答
2

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

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

于 2010-03-15T19:51:30.400 回答