个问题,什么是最好的方式来表示一系统。小数目在缓冲区协议?

有帮助吗?

解决方案

好了,格式网将只是处理这个对你;它运行了类型的属性,并具有完全的支持 decimal.由于没有直接的表达方式 decimal 在原型,它不会(当前)产生的一个 decimal 酒店自一个".原始"文件,但这将是一个很好的调整,以承认一些常见的类型("BCL.小数"或类似的),并解释它为小数。

作为代表它-我有一个 讨论文件 在此(现在的日期,我的嫌疑人)中的格式网wiki区域;现在有一个工作版本,在格式网,只是它不会给你的。

毫无疑问乔恩和我会锤这出更多后的今天;-p

该格式网版本(。原)是喜欢的东西(从 在这里,):

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
}

其他提示

马克和我有很模糊的计划,拿出一个“共同的PB消息”库,这样你可以代表相当常见的类型(日期/时间和十进制瞬间涌现在脑海中)在一个共同的方式,在可用转换。 .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表示的非常紧凑地(但仍0米和0.0000米等之间进行区分)。 exponent_and_sign可能是可以选择的。如果我们真的想。

我不知道马克的项目,但在我的端口I产生局部类,这样你就可以把该和System.Decimal Protobuf.Common.Decimal(或其他)之间的转换成部分类。

我把一个补丁格式-c#-口挂钩而产生的格式课程与当地的小数和时间结构。线的格式明智的,他们是由两个"内在的"原始信息。

这里就是链接:https://code.google.com/p/protobuf-csharp-port/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Priority%20Milestone%20Owner%20Summary&groupby=&sort=&id=78

稍微简单的实施办法比Jon或Marc的是存储为4 sint32 价值观,其方便的地图平凡输出 十进制。GetBits().

原文件将这样的:

message ProtoDecimal {
    sint32 v1 = 1;
    sint32 v2 = 2;
    sint32 v3 = 3;
    sint32 v4 = 4;
}

和转换器将是:

public decimal ConvertToDecimal(AbideDecimal value)
{
    return new decimal(new int[] { value.V1, value.V2, value.V3, value.V4 });
}

public ProtoDecimal ConvertFromDecimal(decimal value)
{
    var bits = decimal.GetBits(value);
    return new ProtoDecimal 
    {
        V1 = bits[0],
        V2 = bits[1],
        V3 = bits[2],
        V4 = bits[3]
    }
}

这可能不是作为简单的其他语言,但是如果你仅仅需要目标C#然后它会采取了同样的最大的16字节的其他方法将(虽然值0可能不是作为紧凑地存储-我不知道足够关于复杂的细节如何格式存储整数),同时清楚得多愚蠢-愚蠢的程序像我这样的:)

显然你将要 比赛马匹 如果你想测试性,但我怀疑有多少。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top