Quantity — це представлення числа у форматі з фіксованою комою. Воно забезпечує зручну серіалізацію та десеріалізацію у форматах JSON та YAML, а також має доступ до String() та AsInt64().
Формат серіалізації такий:
<quantity> ::= <signedNumber><suffix>
(Зверніть увагу, що <suffix> може бути порожнім, як у випадку з "" у <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
(Міжнародна система одиниць; Див.: http://physics.nist.gov/cuu/Units/binary.html)
<decimalSI> ::= m | "" | k | M | G | T | P | E
(Зверніть увагу, що 1024 = 1Ki, але 1000 = 1k; Не ми обирали капіталізацію.)
<decimalExponent> ::= "e" <signedNumber> | "E" <signedNumber>
Незалежно від того, яка з трьох форм експоненти використовується, жодна величина не може перевищувати 2^63-1 за абсолютним значенням, а також не може мати більше 3 знаків після коми. Числа, що перевищують ці межі або є точнішими, будуть обмежені або округлені в більшу сторону. (Наприклад: 0,1 м буде округлено до 1 м.) У майбутньому ці обмеження можуть бути розширені, якщо виникне потреба у більших або менших величинах.
Коли Quantity аналізується з рядка, воно запамʼятовує тип суфікса, який у нього був, і використовує той самий тип під час серіалізації.
Перед серіалізацією Quantity буде приведено до "канонічної форми". Це означає, що експонента/суфікс буде відрегульовано вгору або вниз (з відповідним збільшенням або зменшенням мантиси) таким чином:
Приклади:
Зверніть увагу, що величина НІКОЛИ не буде внутрішньо представлена як число з рухомою комою. Саме в цьому і полягає суть цього підходу.
Неканонічні значення все ще будуть розпізнаватися, якщо вони правильно сформовані, але будуть повторно виведені у своїй канонічній формі. (Тому завжди використовуйте канонічну форму або не порівнюйте їх.)
Цей формат розроблено з метою ускладнити використання цих чисел без написання спеціального коду для їх обробки, в надії, що це спонукає розробників також застосовувати реалізацію з фіксованою комою.
apiVersion: resource
import "k8s.io/apimachinery/pkg/api/resource"
Quantity — це представлення числа у форматі з фіксованою комою. Воно забезпечує зручну серіалізацію та десеріалізацію у форматах JSON та YAML, а також має доступ до String() та AsInt64().
Формат серіалізації такий:
<quantity> ::= <signedNumber><suffix>
(Зверніть увагу, що <suffix> може бути порожнім, як у випадку з "" у <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
(Міжнародна система одиниць; Див.: http://physics.nist.gov/cuu/Units/binary.html)
<decimalSI> ::= m | "" | k | M | G | T | P | E
(Зверніть увагу, що 1024 = 1Ki, але 1000 = 1k; Не ми обирали капіталізацію.)
<decimalExponent> ::= "e" <signedNumber> | "E" <signedNumber>
Незалежно від того, яка з трьох форм експоненти використовується, жодна величина не може перевищувати 2^63-1 за абсолютним значенням, а також не може мати більше 3 знаків після коми. Числа, що перевищують ці межі або є точнішими, будуть обмежені або округлені в більшу сторону. (Наприклад: 0,1 м буде округлено до 1 м.) У майбутньому ці обмеження можуть бути розширені, якщо виникне потреба у більших або менших величинах.
Коли Quantity аналізується з рядка, воно запамʼятовує тип суфікса, який у нього був, і використовує той самий тип під час серіалізації.
Перед серіалізацією Quantity буде приведено до "канонічної форми". Це означає, що експонента/суфікс буде відрегульовано вгору або вниз (з відповідним збільшенням або зменшенням мантиси) таким чином:
Приклади:
Зверніть увагу, що величина НІКОЛИ не буде внутрішньо представлена як число з рухомою комою. Саме в цьому і полягає суть цього підходу.
Неканонічні значення все ще будуть розпізнаватися, якщо вони правильно сформовані, але будуть повторно виведені у своїй канонічній формі. (Тому завжди використовуйте канонічну форму або не порівнюйте їх.)
Цей формат розроблено з метою ускладнити використання цих чисел без написання спеціального коду для їх обробки, в надії, що це спонукає розробників також застосовувати реалізацію з фіксованою комою.