在proto3中将小数作为字符串存储有什么缺点?

时间:2016-07-25 02:17:19

标签: c# persistence protocol-buffers currency proto3

我在持久存储系统中使用Googles协议缓冲库并希望保留货币值,但我不确定photo(float / double)提供的浮点类型是否足够好。将所有货币值存储为字符串是否存在任何缺点(例如,存储“0.10”而不是0.1),然后在检索数据并使用算术时使用Convert.ToDecimal函数?

1 个答案:

答案 0 :(得分:0)

正确预计float/double数据类型适合“货币!”

考虑SQL数据库(以及,嗯,COBOL程序......)如何通常存储“货币”值:它们使用某些十进制表示分类。例如,真正的COBOL程序可能使用“二进制编码的十进制(BCD)”数据类型。 Microsoft Access数据库使用“缩放整数”:美元和美分值乘以10,000,在小数点右侧给出固定(!)“4位数。”

对于这个问题的直接目的,我肯定会将值存储为字符串,然后将非常认真考虑要存储的数字如何处理“舍入”到该位数。 (例如,有一些算法,如“银行家的四舍五入”。)

“存储空间大小?”您关心它。您关心的是,如果特定客户(或审核员......)实际上将所有数字加在打印的对帐单上,那么底线在那张纸上会同意......在(!)至少,在一分钱内。