Не в состоянии предоставить поля deicmal меньше, чем определено в цифрах дроби - PullRequest
1 голос
/ 11 июля 2019

Я работаю с Ян (RFC 6020). У меня есть листовой узел «Частота» в ян. Поле частот имеет тип decimal64, а дробные цифры определены как 6 и находятся в диапазоне от -90,000000 до 90,000000. При попытке подтвердить и сохранить, происходит следующее:

  1. Сохраняется число с 6 десятичными знаками, например. 34.000001
  2. Сохраняется число без десятичных знаков, например. 34

Но когда я пытаюсь сохранить число с десятичным значением меньше 6 цифр, это не спасается. Это дает следующую ошибку: например.

  • 34,1: "неправильные дробные цифры 1 для типа decimal64"
  • 34,001: «неправильные дробные цифры 3 для типа decimal64»
  • 34.00001: «неправильные дробные цифры 5 для типа decimal64»

Пытался искать в сети. Не много документов доступно по этому вопросу. Пробовал играть с параметром диапазона, но он не работает.

leaf Frequency {
    description "Frequency";
    type decimal64 {
        fraction-digits 6;
        range "-90.000000..90.000000";
    }
    default 0;
}

Я ожидаю, что смогу сохранять значения с / без десятичных значений, где ни одно из десятичных значений не может варьироваться от 0 до 6 цифр. например. 34, 34.1, 34.0004, 34.000001 и т. Д.

1 Ответ

0 голосов
/ 11 июля 2019

Пространство значений для десятичного значения типа YANG с дробными цифрами, установленными в 6, являются действительными числами в следующем диапазоне: -9223372036854.775808..9223372036854.775807. 34, 34.1, 34.001, 34.004, 34.00001 все находятся в этом диапазоне и, следовательно, допустимые значения.

Вот что говорит RFC о встроенном типе decimal64 ( RFC6020, раздел 9.3, p1 ):

Тип decimal64 представляет собой подмножество вещественных чисел, которое может быть представлен десятичными цифрами. Пространство значений decimal64: набор чисел, который можно получить, умножив 64-битный целое число со знаком с отрицательной степенью десяти, то есть выражается как «i x 10 ^ -n», где i - целое число 64, а n - целое число от 1 до 18 включительно.

Таким образом, d x 10^f, где d - это десятичное значение64, а f - это дробные цифры, что должно приводить к действительному значению int64, которое колеблется от * 9213372036854775808 до 9223372036854775807, включительно .

Вот как определяются дробные цифры ( RFC6020, раздел 9.3.4, p1 ):

Оператор "дробные цифры", который является подстановкой оператор "type" ДОЛЖЕН присутствовать, если типом является "decimal64". Это принимает в качестве аргумента целое число от 1 до 18 включительно. Это контролирует размер минимальной разницы между значениями тип decimal64, ограничивая пространство значений числами, которые выражается как «i x 10 ^ -n», где n - аргумент дробных цифр.

В следующей таблице перечислены минимальное и максимальное значение для каждого дробно-разрядное значение:

+----------------+-----------------------+----------------------+
| fraction-digit | min                   | max                  |
+----------------+-----------------------+----------------------+
| 1              | -922337203685477580.8 | 922337203685477580.7 |
| 2              | -92233720368547758.08 | 92233720368547758.07 |
| 3              | -9223372036854775.808 | 9223372036854775.807 |
| 4              | -922337203685477.5808 | 922337203685477.5807 |
| 5              | -92233720368547.75808 | 92233720368547.75807 |
| 6              | -9223372036854.775808 | 9223372036854.775807 |
| 7              | -922337203685.4775808 | 922337203685.4775807 |
| 8              | -92233720368.54775808 | 92233720368.54775807 |
| 9              | -9223372036.854775808 | 9223372036.854775807 |
| 10             | -922337203.6854775808 | 922337203.6854775807 |
| 11             | -92233720.36854775808 | 92233720.36854775807 |
| 12             | -9223372.036854775808 | 9223372.036854775807 |
| 13             | -922337.2036854775808 | 922337.2036854775807 |
| 14             | -92233.72036854775808 | 92233.72036854775807 |
| 15             | -9223.372036854775808 | 9223.372036854775807 |
| 16             | -922.3372036854775808 | 922.3372036854775807 |
| 17             | -92.23372036854775808 | 92.23372036854775807 |
| 18             | -9.223372036854775808 | 9.223372036854775807 |
+----------------+-----------------------+----------------------+

Используемый вами инструмент неверен. Следующее действительно YANG:

  typedef foobar {
    type decimal64 {
      fraction-digits 6;
      range "-90.000000..90.000000";
    }
    default 34.00001;
  }

YANG 1.1 ( RFC7950 ) не изменил этот аспект языка (применяется то же самое).

...