如何调整小数精度.net?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (40)

这些行在C#

decimal a = 2m;
decimal b = 2.0m;
decimal c = 2.00000000m;
decimal d = 2.000000000000000000000000000m;

Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
Console.WriteLine(d);

生成此输出:

2
2.0
2.00000000
2.000000000000000000000000000

所以我可以看到,从文字创建一个十进制变量允许我控制精度。

  • 我可以在不使用文字的情况下调整小数变量的精度吗?
  • 我该如何创建b?我怎样才能从c创建b?
提问于
用户回答回答于

为了更严格地符合ECMA CLI规范,在.NET 1.1中引入了像这样保留尾随零。

这里有一些关于MSDN的信息,例如这里

可以如下调整精度:

  • Math.Round(或ceil等)降低精度(b来自c)
  • 乘以1.000 ...(以你想要的小数位数)来提高精度 - 例如乘以1.0M以从a得到b。
用户回答回答于

只会看到完全相同数据的不同表示。a的精确度decimal将被缩放为与其需要的一样大(在合理范围内)。

来自System.Decimal

十进制数是一个浮点值,它由一个符号,一个数值(其中数值范围从0到9)和一个缩放因子组成,该因子表示浮点小数点的位置,该浮点小数点将整数部分和小数部分分开的数值。 Decimal值的二进制表示由1位符号,96位整数和用于分割96位整数的比例因子组成,并指定它的哪一部分是小数部分。缩放因子是隐式地数目为10,升温至指数取值范围为0至28.因此,十进制值的二进制表示的形式为,((-2 96到2 96)/ 10 (0〜28) ),-2 96 -1等于MinValue,而2 96 -1等于MaxValue。 比例因子还保留了一个十进制数中的任何尾随零。尾数零不会影响算术或比较操作中的十进制数值。但是,如果应用了适当的格式字符串,则ToString方法可以显示尾随零。

扫码关注云+社区