C# 十进制值应为0.0x时为零

C# 十进制值应为0.0x时为零,c#,decimal,division,C#,Decimal,Division,如果这是以前讨论过的,我很抱歉,我很难找到这个 我在计算折旧率。我们计算的一部分是1/寿命(以月为单位)。我的表格将此数据存储在十进制字段中。我试过test=1/估计寿命但测试(定义为十进制)的计算结果为0 假设估计寿命为36个月。因此,1/36应等于0.02777778 有没有想过我做错了什么 顺便说一句,我将测试更改为双精度测试,得到了相同的结果。尝试: test = 1.0M / estimatedLife; 尝试: 代码将两个整数相除,然后将结果(也是一个整数)赋给十进制变量 您需要切

如果这是以前讨论过的,我很抱歉,我很难找到这个

我在计算折旧率。我们计算的一部分是1/寿命(以月为单位)。我的表格将此数据存储在
十进制
字段中。我试过
test=1/估计寿命
测试
(定义为
十进制
)的计算结果为0

假设估计寿命为36个月。因此,1/36应等于0.02777778

有没有想过我做错了什么

顺便说一句,我将
测试更改为双精度测试,得到了相同的结果。

尝试:

test = 1.0M / estimatedLife;
尝试:


代码将两个整数相除,然后将结果(也是一个整数)赋给
十进制变量


您需要切换到
十进制
除法,方法是将至少一个操作数设为
十进制
,如下:
1.0M/estimatedLife
您的代码将两个整数除法,然后将结果(也是一个整数)赋给
十进制
变量


您需要切换到
decimal
除法,方法是将至少一个操作数设为
decimal
,如下所示:
1.0M/estimatedLife
estimatedLife是一个int,不是吗。试试这个:

    decimal test = 1 / (decimal) estimatedLife;
或者使用SwDevMan81的建议:

    test = 1.0M / estimatedLife;
问题是整数除法会丢弃小数点后的所有内容。其中一个参数必须是十进制,才能得到所需的结果

他在评论中发表的评论说:

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


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

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

    decimal test = 1 / (decimal) estimatedLife;
或者使用SwDevMan81的建议:

    test = 1.0M / estimatedLife;
问题是整数除法会丢弃小数点后的所有内容。其中一个参数必须是十进制,才能得到所需的结果

他在评论中发表的评论说:

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


因此,1.0M表示“值为1.0的十进制类型的文字”

另一个内置选项是:


要写的更多,但我要说的是相当明确。

另一个内置的替代方案是:


要写的更多,但我要说的是相当明确。

如果您需要特定的精度(我注意到您的输出设置为小数点后8位),您可以使用

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

另外,如果您需要特定的精度(我注意到您的输出设置为小数点后8位),您可以使用

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

“M”是做什么的?我做了1点,效果很好!我在1.0M上得到一个编译错误,
M
使它成为一个
decimal
1.00
是一个
双精度的
,精度较低。正如SLaks所说,它是一个十进制数。这是文档:一定是因为我忘了将test从double改回decimal。现在可以了,“M”是做什么的?我做了1点,效果很好!我在1.0M上得到一个编译错误,
M
使它成为一个
decimal
1.00
是一个
双精度的
,精度较低。正如SLaks所说,它是一个十进制数。这是文档:一定是因为我忘了将test从double改回decimal。现在可以了。