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