Что лучший способ состоит в том, чтобы представить Систему. Десятичное число в Буферах Протокола?

14
задан Community 23 May 2017 в 12:24
поделиться

3 ответа

Ну, protobuf-сеть просто обработает это для Вас; это убегает свойства типов и имеет полную поддержку decimal. С тех пор нет никакого прямого способа выразить decimal в первичном, это не будет (в настоящее время) генерировать decimal свойство из ".proto" файла, но это была бы хорошая тонкая настройка, чтобы распознать некоторый общий тип ("BCL.Decimal" или подобный) и интерпретировать его как десятичное число.

Что касается представления его - я имел документ обсуждения об этом (теперь устаревший, я подозреваю) в protobuf-сетевой области Wiki; существует теперь рабочая версия в protobuf-сети, которая просто делает это для Вас.

Несомненно Jon и я будем ковать это больше позже сегодня;-p

protobuf-сетевая версия этого (в .proto) является чем-то как (от здесь ):

message Decimal {
  optional uint64 lo = 1; // the first 64 bits of the underlying value
  optional uint32 hi = 2; // the last 32 bis of the underlying value
  optional sint32 signScale = 3; // the number of decimal digits, and the sign
}
7
ответ дан 1 December 2019 в 14:33
поделиться

У Marc и меня есть очень неопределенные планы придумать "общую библиотеку" сообщения ПБ, таким образом, что можно представить довольно общие типы (дата/время и десятичное число, прыгающее немедленно для возражения) в распространенном способе с преобразованиями, доступными в.NET и Java (и что-либо еще, что любой хочет внести).

, Если бы Вы рады придерживаться.NET, и Вы ищете компактность, я возможно пошел бы с чем-то как:

message Decimal {

    // 96-bit mantissa broken into two chunks
    optional uint64 mantissa_msb = 1;
    optional uint32 mantissa_lsb = 2;

    required sint32 exponent_and_sign = 3;
}

знак может просто быть представлен знаком exponent_and_sign, при этом экспонента является абсолютным значением.

Создание обеих частей дополнительной мантиссы означает, что 0 представлен очень сжато (но все еще дифференцирующийся между 0m и 0.0000 м и т.д.). exponent_and_sign мог быть дополнительным также, если бы мы действительно хотели.

я не знаю о проекте Marc, но в моем порте я генерирую частичные классы, таким образом, Вы можете помещенный преобразование между Системой. Decimal и Protobuf. Распространенный. Десятичное число (или безотносительно) в частичный класс.

5
ответ дан 1 December 2019 в 14:33
поделиться

Когда Вы знаете, что у Вас есть ограниченное количество десятичных чисел, можно использовать самую маленькую единицу в качестве целочисленного значения. Например, когда обработка одних денег не требует десятичного типа, но вместо этого может определить для использования центов единицы. Тогда целое число со значением 2 относилось бы к 0.02 в любой валюте, используется.

0
ответ дан 1 December 2019 в 14:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: