实际上C#的decimal类型就是按照你说的那种方式保存小数。每个decimal用4个int来表示一个小数,其中用3个int表示去掉小数点的整数,用一个int表示正负和小数点位置。可以用decimal.GetBits方法获得decimal在内存中存储的真实数据。比如说:-123.120,在C#中表示为:
数组的前3个int用来表示小数去掉小数点的整数,第4个int用来表示正负和小数点位置:
第32位的1表示负数,从第17位到31位表示小数点的位置(第1位到第16位保留为0),二进制11是3,所以小数点在从右往左数第3位。