Количество
import "k8s.io/apimachinery/pkg/api/resource"
Количество — это представление числа с фиксированной точкой. Оно обеспечивает удобное маршаллирование/демаршаллирование в 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>
Независимо от используемой формы экспоненты, ни одно количество не может представлять число, модуль которого больше, чем 2^63-1, и оно не может иметь более 3 десятичных знаков. Числа, большие или более точные, будут ограничены или округляться до ближайшего (например: 0,1м будет округлено до 1м). Это может быть расширено в будущем, если понадобятся большие или меньшие количества.
Когда количество парсится из строки, оно запоминает тип суффикса и использует тот же тип при сериализации.
Перед сериализацией количество приводится к «канонической форме». Это означает, что экспонента/суффикс будут изменены вверх или вниз (с соответствующим увеличением или уменьшением мантиссы) так, что:
- Точность не теряется — дробные цифры не выводятся — экспонента (или суффикс) максимальна.
Знак будет опущен, если число не отрицательное.
Примеры:
- 1,5 будет сериализовано как "1500m" — 1,5Gi будет сериализовано как "1536Mi"
Обратите внимание, что количество НИКОГДА не представляется во внутреннем формате с плавающей точкой. Это и есть вся суть данного упражнения.
Неканонические значения всё ещё будут парситься, если они правильно сформированы, но будут повторно выведены в канонической форме. (Поэтому всегда используйте каноническую форму или не используйте diff.)
Этот формат призван затруднить использование этих чисел без написания специального кода обработки, в надежде, что это заставит разработчиков также использовать реализацию с фиксированной точкой.
© 2024 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
Copyright © 2024 The Linux Foundation ®. All rights reserved.
https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/quantity/