decimal
类型是如何实现的?
更新
谢谢!我将坚持使用64位的长度和我自己的隐含小数。
发布于 2010-07-21 04:40:01
维基百科上的Decimal Floating Point文章,以及这篇关于System.Decimal
的文章的特定链接。
十进制是以128位存储的,即使只有102位是严格需要的。可以方便地将小数看作三个表示尾数的32位整数,然后是一个表示符号和指数的整数。最后一个整数的最高位是符号位(正常情况下,对于负数,该位被设置为(1) ),位16-23 (高位16位字的低位)包含指数。其他位必须全部清零(0)。这种表示是由decimal.GetBits(十进制)给出的,它返回一个由4个整数组成的数组。
发布于 2010-07-21 04:39:37
如http://msdn.microsoft.com/en-us/library/system.decimal(VS.80).aspx上MSDN十进制结构页面所述
十进制值的二进制表示形式由一个1位符号、一个96位整数和一个比例因子组成,该比例因子用于将96位整数相除并指定它的哪个部分是小数。比例因子隐含地是数字10,其指数从0到28。因此,十进制值的二进制表示形式为(-296到296) / 10(0到28)),其中-296-1等于MinValue,296-1等于MaxValue。
缩放因子还会保留十进制数中的所有尾随零。在算术或比较运算中,尾随零不影响Decimal数字的值。但是,如果应用了适当的格式字符串,则ToString方法可以显示尾随零。
发布于 2010-07-21 04:39:19
摘自J.Richter的"CLR via C#“第三版:
一个128位的高精度浮点值,通常用于不能容忍舍入误差的财务计算。在128位中,1位表示值的符号,96位表示值本身,8位表示除以96位值的10的幂(可以是从0到28的任意位置)。剩余的位未使用。
https://stackoverflow.com/questions/3294153
复制相似问题