Mak*_*ebi 28 .net c# refactoring decimal
我保持了C#桌面应用程序,在Windows 7上,使用Visual Studio 2013和某处有以下行,试图创建一个0.01十进制值的代码,使用十进制(的Int32 [])构造函数:
decimal d = new decimal(new int[] { 1, 0, 0, 131072 });
Run Code Online (Sandbox Code Playgroud)
第一个问题是,它与以下不同吗?
decimal d = 0.01M;
Run Code Online (Sandbox Code Playgroud)
如果没有什么不同,开发人员为什么会遇到这样编码的麻烦?
我需要更改此行以创建动态值.就像是:
decimal d = (decimal) (1 / Math.Pow(10, digitNumber));
Run Code Online (Sandbox Code Playgroud)
我会以这种方式引起一些不受欢迎的行为吗?
Pat*_*man 12
当小数点的来源由位组成时,对我来说似乎很有用.
.NET中使用的十进制有一个基于一系列位参数的实现(不只是一个位流,比如一个int
),所以当你与其他系统进行通信时,使用位来构造一个小数位是很有用的.十进制通过一个字节blob(一个套接字,一块内存等).
现在很容易将位组转换为小数.无需花哨的转换代码.此外,您可以根据标准中定义的输入构造小数,这样便于测试.NET框架.
该decimal(int[] bits)
构造函数允许你给你创建位必须是一个4 int数组,其中小数的按位定义:
位0,1和2构成96位整数.
位3包含比例因子和符号
它只是让你从你的例子中得到十分精确的十进制定义,我认为你不需要那么高的精度.
有关使用该构造函数的更多详细信息,请参阅此处,或者此处查看可能更适合您的其他构造函数
更具体地回答你的问题,如果digitNumber
是16位指数然后decimal d = new decimal(new int[] { 1, 0, 0, digitNumber << 16 });
做你想要的,因为指数进入数组中最后一个int的16 - 23位
归档时间: |
|
查看次数: |
2152 次 |
最近记录: |