猿问

调整十进制精度.net

这些在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

因此,我可以看到从文字中创建一个十进制变量可以控制精度。


是否可以在不使用文字的情况下调整小数变量的精度?

如何从a创建b?如何从c创建b?


慕的地10843
浏览 509回答 3
3回答

杨魅力

像这样保留尾随零是.NET 1.1中引入的,目的是更严格地符合ECMA CLI规范。在MSDN上对此有一些信息,例如here。您可以如下调整精度:Math.Round(或Ceiling,Floor等)以降低精度(c中的b)乘以1.000 ...(与所需的小数位数)以提高精度-例如乘以1.0M从a中得到b。

萧十郎

您只是看到完全相同的数据的不同表示形式。a的精度decimal将缩放为与所需的精度一样大(在合理范围内)。来自System.Decimal:十进制数是一个浮点值,它由一个符号,一个数值(其中值中的每个数字都介于0到9之间)以及一个比例因子(表示将整数和小数部分分开的浮点小数的位置)组成。数值的十进制值的二进制表示形式由一个1位符号,一个96位整数和一个比例因子组成,该比例因子用于对96位整数进行除法并指定其哪一部分为十进制小数。缩放因子隐式为数字10,升至0到28之间的指数。因此,小数的二进制表示形式为((-2 96到2 96)/ 10 (0到28)) ,其中-2 96 -1等于MinValue,而2 96 -1等于MaxValue。比例因子还保留十进制数中的所有尾随零。尾随零不会影响算术或比较操作中小数的值。但是,如果应用了适当的格式字符串,则可以通过ToString方法显示尾随零。

陪伴而非守候

我发现我可以通过乘以或除以1来“篡改”音阶。decimal a = 2m;decimal c = 2.00000000m;decimal PreciseOne = 1.000000000000000000000000000000m;&nbsp; //add maximum trailing zeros to adecimal x = a * PreciseOne;&nbsp; //remove all trailing zeros from cdecimal y = c / PreciseOne;我可以制造出足够精确的1来按已知尺寸更改比例因子。decimal scaleFactorBase = 1.0m;decimal scaleFactor = 1m;int scaleFactorSize = 3;for (int i = 0; i < scaleFactorSize; i++){&nbsp; scaleFactor *= scaleFactorBase;}decimal z = a * scaleFactor;
随时随地看视频慕课网APP
我要回答