为了账号安全,请及时绑定邮箱和手机立即绑定

调整十进制精度.net

调整十进制精度.net

慕的地10843 2019-12-02 12:48:56
这些在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);生成此输出:22.02.000000002.000000000000000000000000000因此,我可以看到从文字中创建一个十进制变量可以控制精度。是否可以在不使用文字的情况下调整小数变量的精度?如何从a创建b?如何从c创建b?
查看完整描述

3 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

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


在MSDN上对此有一些信息,例如here。


您可以如下调整精度:


Math.Round(或Ceiling,Floor等)以降低精度(c中的b)


乘以1.000 ...(与所需的小数位数)以提高精度-例如乘以1.0M从a中得到b。


查看完整回答
反对 回复 2019-12-02
?
萧十郎

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方法显示尾随零。


查看完整回答
反对 回复 2019-12-02
?
陪伴而非守候

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;


查看完整回答
反对 回复 2019-12-02
  • 3 回答
  • 0 关注
  • 508 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信