如果我们将填充声明为 const 小数,则填充不起作用。
mymoney = 1.2 而你的钱 = 1.20,如何解释这种行为?
class Program
{
static void Main(string[] args)
{
decimal balance = 1.2m;
const decimal ConstPadding = 0.00m;
decimal padding = 0.00m;
decimal mymoney = decimal.Round(balance + ConstPadding, 2);
decimal yourmoney = decimal.Round(balance + padding, 2);
Console.WriteLine(mymoney); // 1.2
Console.WriteLine(yourmoney); //1.20
}
}
编译器“知道”向值添加零“不应该”改变该值 - 因此它对此进行了优化。现在可以说,考虑到十进制加法的性质,这是一种无效的优化,但如果您查看生成的代码,您会发现计算mymoney
不涉及添加。
老实说,我不认为我会尝试使用添加 0.00m 作为确保特定比例的方法。你could创建您自己的代码来强制执行比例,使用decimal.GetBits http://msdn.microsoft.com/en-us/library/system.decimal.getbits.aspx and 执行相反操作的构造函数 http://msdn.microsoft.com/en-us/library/t1de0ya1.aspx- 但我不认为这会很好。
您确实需要这种“两位小数”形式作为中间值,还是仅用于演示?如果是后者,我会查看格式字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)