如果之前讨论过这个,对不起,我很难搜索到这个。
我正在计算折旧率。我们计算的一部分是 1/生命(以月为单位)。我的表将这些数据存储在一个decimal
字段中。我试过了,但是(定义为 a )test = 1 / estimatedLife;
的计算结果是 0。test
decimal
假设估计寿命为 36 个月。所以 1/36 应该等于 0.02777778。
有什么想法我做错了吗?
顺便说一句,我将其更改test
为双倍并得到了相同的结果。
尝试:
test = 1.0M / estimatedLife;
估计生命是一个整数,不是吗。尝试这个:
decimal test = 1 / (decimal) estimatedLife;
或使用 SwDevMan81 的建议:
test = 1.0M / estimatedLife;
问题是整数除法会丢弃小数点后的所有内容。其中一个参数必须是小数才能获得所需的结果。
他在评论中发布的文档链接说:
如果要将数字实数文字视为十进制,请使用后缀 m 或 M
所以 1.0M 表示“值为 1.0 的十进制类型的文字”
只是补充一下,如果您需要特定的精度(我注意到您的输出设置为 8 位小数),您可以使用
decimal test = Math.Round(1M / estimatedLife,8);
您的代码将两个整数相除,然后将结果(也是一个整数)分配给一个decimal
变量。
您需要decimal
通过将至少一个操作数设为 a 来切换到除法decimal
,如下所示:1.0M / estimatedLife
.