Quantity

Quantity

Quantity 是数字的定点表示。它提供了方便的 JSON 和 YAML 编组/解组功能,以及 String()AsInt64() 访问器。

序列化格式如下:


   (Note that <suffix> may be empty, from the "" case in <decimalSI>.)

<digit>           ::= 0 | 1 | ... | 9 <digits>          ::= <digit> | <digit><digits> <number>          ::= <digits> | <digits>.<digits> | <digits>. | .<digits> <sign>            ::= "+" | "-" <signedNumber>    ::= <number> | <sign><number> <suffix>          ::= <binarySI> | <decimalExponent> | <decimalSI> <binarySI>        ::= Ki | Mi | Gi | Ti | Pi | Ei

   (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)

<decimalSI>       ::= m | "" | k | M | G | T | P | E

   (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)

<decimalExponent> ::= "e" <signedNumber> | "E" <signedNumber> ```

无论使用三种指数形式中的哪一种,任何 Quantity 都不能表示幅度大于 2^63-1 的数字,也不能超过 3 位小数。更大或更精确的数字将被截断或向上取整。(例如:0.1m 将向上取整为 1m。)如果将来需要更大或更小的数量,这可能会被扩展。

当 Quantity 从字符串解析时,它会记住其后缀类型,并在再次序列化时使用相同的类型。

在序列化之前,Quantity 将被置于 "规范形式"(canonical form)。这意味着指数/后缀将向上或向下调整(尾数相应增加或减少),使得:

- 不会丢失精度 - 不会输出小数位 - 指数(或后缀)尽可能大。

除非数字为负数,否则符号将被省略。

示例:

- 1.5 将被序列化为 "1500m" - 1.5Gi 将被序列化为 "1536Mi"

只要格式正确,非规范值仍可被解析,但会以其规范形式重新输出。(因此请始终使用规范形式,或者不要进行 diff。)

此格式旨在使不编写某种特殊处理代码就使用这些数字变得困难,希望以此促使实现者也使用定点实现。

apiVersion: resource

import "k8s.io/apimachinery/pkg/api/resource"

Quantity

Quantity 是数字的定点表示。它提供了方便的 JSON 和 YAML 编组/解组功能, 以及 String()AsInt64() 访问器。

序列化格式如下:

<quantity>        ::= <signedNumber><suffix>

	(Note that <suffix> may be empty, from the "" case in <decimalSI>.)

<digit>           ::= 0 | 1 | ... | 9 <digits>          ::= <digit> | <digit><digits> <number>          ::= <digits> | <digits>.<digits> | <digits>. | .<digits> <sign>            ::= "+" | "-" <signedNumber>    ::= <number> | <sign><number> <suffix>          ::= <binarySI> | <decimalExponent> | <decimalSI> <binarySI>        ::= Ki | Mi | Gi | Ti | Pi | Ei

	(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)

<decimalSI>       ::= m | "" | k | M | G | T | P | E

	(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)

<decimalExponent> ::= "e" <signedNumber> | "E" <signedNumber>

无论使用三种指数形式中的哪一种,任何 Quantity 都不能表示幅度大于 2^63-1 的数字, 也不能超过 3 位小数。更大或更精确的数字将被截断或向上取整。 (例如:0.1m 将向上取整为 1m。) 如果将来需要更大或更小的数量,这可能会被扩展。

当 Quantity 从字符串解析时,它会记住其后缀类型,并在再次序列化时使用相同的类型。

在序列化之前,Quantity 将被置于"规范形式"(canonical form)。 这意味着指数/后缀将向上或向下调整(尾数相应增加或减少),使得:

  • 不会丢失精度
  • 不会输出小数位
  • 指数(或后缀)尽可能大。

除非数字为负数,否则符号将被省略。

示例:

  • 1.5 将被序列化为 "1500m"
  • 1.5Gi 将被序列化为 "1536Mi"

请注意,Quantity 永远不会在内部以浮点数表示。这正是此设计的全部意义所在。

只要格式正确,非规范值仍可被解析,但会以其规范形式重新输出。 (因此请始终使用规范形式,或者不要进行 diff。)

此格式旨在使不编写某种特殊处理代码就使用这些数字变得困难, 希望以此促使实现者也使用定点实现。


最后修改 August 01, 2026 at 7:12 PM PST: [zh-cn]sync quantity-resource (ab75eb89d3)