Ну, 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
}
У 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. Распространенный. Десятичное число (или безотносительно) в частичный класс.
Когда Вы знаете, что у Вас есть ограниченное количество десятичных чисел, можно использовать самую маленькую единицу в качестве целочисленного значения. Например, когда обработка одних денег не требует десятичного типа, но вместо этого может определить для использования центов единицы. Тогда целое число со значением 2
относилось бы к 0.02
в любой валюте, используется.