我在 C# 代码中工作,它通过以下方式分配十进制值。这些值是相同的还是有区别的?
decimal a = 0;
decimal b = 0m;
decimal c = 0.00m;
Run Code Online (Sandbox Code Playgroud)
只是在其他好的答案中添加了一些更实用的信息
小数有 的许多内部表示0,但是它们在比较时都为零
Decimal 值的二进制表示由 1 位符号、96 位整数和用于划分 96 位整数并指定它的哪一部分是十进制小数的比例因子组成。比例因子隐含地是数字 10,上升到 0 到 28 范围内的指数。因此,十进制值的二进制表示形式为 ((-296 到 296) / 10(0 到 28)),其中 -( 296-1) 等于 MinValue,而 296-1 等于 MaxValue。
缩放因子还保留 Decimal 数中的任何尾随零。尾随零不会影响算术或比较运算中十进制数的值。但是,如果应用了适当的格式字符串,ToString 方法可能会显示尾随零。
更改比例因子的示例
string GetBits(decimal d)
{
var bits = decimal.GetBits(d);
return $"{d==0} {d,31} {bits[3],10:X8}{bits[2],10:X8}{bits[1],10:X8}{bits[0],10:X8}";
}
Console.WriteLine(GetBits(0));
Console.WriteLine(GetBits(0.0m));
Console.WriteLine(GetBits(0.000m));
// Manually set the Scaling Factor and Sign
Console.WriteLine(GetBits(new decimal(0,0,0,true,10)));
Run Code Online (Sandbox Code Playgroud)
输出
Equals 0 ToString Other Hi Mid Lo
------------------------------------------------------------------------------
True 0 00000000 00000000 00000000 00000000
True 0.0 00010000 00000000 00000000 00000000
True 0.000 00030000 00000000 00000000 00000000
True 0.0000000000 800A0000 00000000 00000000 00000000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
819 次 |
| 最近记录: |