3 回答
TA贡献1811条经验 获得超6个赞
像这样保留尾随零是.NET 1.1中引入的,目的是更严格地符合ECMA CLI规范。
在MSDN上对此有一些信息,例如here。
您可以如下调整精度:
Math.Round(或Ceiling,Floor等)以降低精度(c中的b)
乘以1.000 ...(与所需的小数位数)以提高精度-例如乘以1.0M从a中得到b。
TA贡献1815条经验 获得超13个赞
您只是看到完全相同的数据的不同表示形式。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方法显示尾随零。
TA贡献1757条经验 获得超8个赞
我发现我可以通过乘以或除以1来“篡改”音阶。
decimal a = 2m;
decimal c = 2.00000000m;
decimal PreciseOne = 1.000000000000000000000000000000m;
//add maximum trailing zeros to a
decimal x = a * PreciseOne;
//remove all trailing zeros from c
decimal y = c / PreciseOne;
我可以制造出足够精确的1来按已知尺寸更改比例因子。
decimal scaleFactorBase = 1.0m;
decimal scaleFactor = 1m;
int scaleFactorSize = 3;
for (int i = 0; i < scaleFactorSize; i++)
{
scaleFactor *= scaleFactorBase;
}
decimal z = a * scaleFactor;
- 3 回答
- 0 关注
- 508 浏览
添加回答
举报