相关疑难解决方法(0)

如何将十进制值舍入到2个小数位(对于页面上的输出)

当显示当前小数的值时.ToString(),它精确到15个小数位,并且由于我用它来表示美元和美分,我只希望输出为2位小数.

我是否使用此变体.ToString()

.net c# decimal rounding

610
推荐指数
16
解决办法
98万
查看次数

C#为什么等小数会产生不等的哈希值?

我们碰到了一个神奇的十进制数字,打破了我们的哈希表.我把它归结为以下最小的情况:

decimal d0 = 295.50000000000000000000000000m;
decimal d1 = 295.5m;

Console.WriteLine("{0} == {1} : {2}", d0, d1, (d0 == d1));
Console.WriteLine("0x{0:X8} == 0x{1:X8} : {2}", d0.GetHashCode(), d1.GetHashCode()
                  , (d0.GetHashCode() == d1.GetHashCode()));
Run Code Online (Sandbox Code Playgroud)

给出以下输出:

295.50000000000000000000000000 == 295.5 : True
0xBF8D880F == 0x40727800 : False
Run Code Online (Sandbox Code Playgroud)

真正奇怪的是:更改,添加或删除d0中的任何数字,问题就会消失.甚至添加或删除其中一个尾随零!这个标志似乎并不重要.

我们的解决方法是将值除去以消除尾随零,如下所示:

decimal d0 = 295.50000000000000000000000000m / 1.000000000000000000000000000000000m;
Run Code Online (Sandbox Code Playgroud)

但我的问题是,C#怎么做错了?

.net c# hash decimal

42
推荐指数
1
解决办法
2968
查看次数

标签 统计

.net ×2

c# ×2

decimal ×2

hash ×1

rounding ×1