【问题标题】:Why are decimals types base 10?为什么小数类型以 10 为底?
【发布时间】:2014-07-13 21:07:40
【问题描述】:

我不理解二进制浮点和十进制浮点这两个术语。我知道浮点数(32 位)和双精度数(64 位)是二进制浮点数,而小数(128 位)是十进制浮点数。我知道小数是以 10 为底,二进制是以 2 为底。但是,我不明白为什么小数是以 10 为底的,因为最终一切都是以 2 为底的?为什么小数以 10 为底,而不是像浮点数和双精度数那样以 2 为底?

我今天浏览了很多网站,例如这个:Difference between decimal, float and double in .NET?

【问题讨论】:

标签: .net vb.net floating-point


【解决方案1】:

简短回答:您可以用十进制表示精确地表示“简单”十进制数,例如 0.1,但只能用二进制表示大约

通常人们使用“十进制”类型的原因是为了表示金钱,它通常以大值和小分数(100 分之一)的形式出现。十进制类型最适合跟踪这些类型的数字,并且不会冒产生 10.09999999999999 等结果的舍入错误的风险。

【讨论】:

    【解决方案2】:

    浮点数由符号(+ 或 -)、有效数和指数组成。 有效数字由许多以 B 为底的数字组成。对指数 e 的解释是该数应乘以 Be。将 B 选择为 2 或 10 对小整数(0、1、2……可以用二进制浮点数和十进制浮点数精确表示)没有区别,但对于小数和非常大的数可以精确表示的二进制和十进制是不一样的。

    示例:二进制浮点可以精确表示 2-100 和 2100,但 decimal128 不能。十进制浮点可以精确表示 0.1,但二进制浮点不能(在任何精度下)。

    你说得对,最终一切都是二进制的。许多方案用于将十进制浮点表示为位。有效数字是编码的棘手部分。 IEEE标准化委员会设计了two schemes,一种便于软件解码,一种便于硬件解码。我不知道.NET 使用什么。它可能使用类似于 IEEE 754 浮点标准中的“二进制整数有效位字段”技术,其中分配的位用于以二进制编码 0 和 Bn 之间的数字 - 1,因为这是在软件中最有效的方法。

    【讨论】:

    • FWIW,.NET 使用 96 位二进制有效数,5 位十进制比例因子(他们不称之为指数),有效值为 0..28(28 代表 10^-28 ) 和一个符号位。这允许人们拥有像1.000m 这样的文字,并将其存储为具有比例因子3(即10^-3)的1000 有效数字,即保留给定的小数。
    猜你喜欢
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    相关资源
    最近更新 更多