gpt4 book ai didi

c# - C# 中 "decimal"类型的有趣行为

转载 作者:IT王子 更新时间:2023-10-29 04:38:56 26 4
gpt4 key购买 nike

如果我们将填充声明为 const decimal,则填充不起作用。

我的钱 = 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 作为确保特定比例的方法。您可以使用 decimal.GetBits 创建自己的代码来强制执行缩放。和 the constructor performing the reverse operation - 但我认为这不会非常好。

您确定需要这种“两位小数”形式作为中间值,还是仅用于演示?如果是后者,我会查看格式字符串。

关于c# - C# 中 "decimal"类型的有趣行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6497500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com