小数何时被视为“规范”?

问题描述 投票:0回答:1

互联网上到处都说如果小数是规范的,

decimal.Decimal.is_canonical()
方法将返回
True

但这到底意味着什么呢?这只是我不知道的一些术语吗?

python python-3.x decimal
1个回答
7
投票

正如 @snakecharmerb 指出的,该方法将始终返回

True
,但我不认为这会使问题变得毫无意义。顺便说一句,为什么该方法总是返回
True
可以从方法
canonical()
中看出:

返回参数的规范编码。目前,编码 Decimal 实例始终是规范的,因此此操作 返回其参数不变。

但是,当然,这并不能真正说明这个问题。但如果我们看看方法

normalize()
,我们就会得到一些见解:

通过去掉最右边的尾随零来标准化数字 将任何等于 Decimal('0') 的结果转换为 Decimal('0e0')。用过的 用于生成等价类属性的规范值。 例如,

Decimal('32.100')
Decimal('0.321000e+2')
都是 归一化为等效值
Decimal('32.1')
.

以上描述或多或少地解释了规范值是什么。 还有

问。表达同一价值的方式有很多种。数字200, 200.000、2E2 和 02E+4 在不同精度下都具有相同的值。有没有办法将它们转换为单一可识别的规范 价值?

A. Normalize() 方法将所有等效值映射到单个值 代表:

>>> values = map(Decimal, '200 200.000 2E2 .02E+4'.split()) >>> [v.normalize() for v in values] [Decimal('2E+2'), Decimal('2E+2'), Decimal('2E+2'), Decimal('2E+2')]

canonical方法演示


前 3 个 Decimal 值(但不是第四个)具有相同的规范表示,因为它们具有相同的值 

精度。 >>> from decimal import Decimal >>> >>> values = map(Decimal, '2E2 .2E+3 .02E+4 20E1'.split()) >>> [v.canonical() for v in values] [Decimal('2E+2'), Decimal('2E+2'), Decimal('2E+2'), Decimal('2.0E+2')] >>>

© www.soinside.com 2019 - 2024. All rights reserved.