首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在幕后,十进制值类型在C#/.NET中发生了什么?

在幕后,十进制值类型在C#/.NET中发生了什么?
EN

Stack Overflow用户
提问于 2010-07-21 04:35:14
回答 5查看 4.5K关注 0票数 21

decimal类型是如何实现的?

更新

  • 它是一个128位的值类型(16字节)
  • 1符号位
  • 96位(12字节)用于尾数
  • 8位用于尾数位(其中23位!)设置为0

谢谢!我将坚持使用64位的长度和我自己的隐含小数。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-07-21 04:40:01

维基百科上的Decimal Floating Point文章,以及这篇关于System.Decimal的文章的特定链接。

十进制是以128位存储的,即使只有102位是严格需要的。可以方便地将小数看作三个表示尾数的32位整数,然后是一个表示符号和指数的整数。最后一个整数的最高位是符号位(正常情况下,对于负数,该位被设置为(1) ),位16-23 (高位16位字的低位)包含指数。其他位必须全部清零(0)。这种表示是由decimal.GetBits(十进制)给出的,它返回一个由4个整数组成的数组。

票数 10
EN

Stack Overflow用户

发布于 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方法可以显示尾随零。

票数 1
EN

Stack Overflow用户

发布于 2010-07-21 04:39:19

摘自J.Richter的"CLR via C#“第三版:

一个128位的高精度浮点值,通常用于不能容忍舍入误差的财务计算。在128位中,1位表示值的符号,96位表示值本身,8位表示除以96位值的10的幂(可以是从0到28的任意位置)。剩余的位未使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3294153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档