我在持久存储系统中使用Googles协议缓冲库并希望保留货币值,但我不确定photo(float / double)提供的浮点类型是否足够好。将所有货币值存储为字符串是否存在任何缺点(例如,存储“0.10”而不是0.1),然后在检索数据并使用算术时使用Convert.ToDecimal函数?
答案 0 :(得分:0)
您正确预计float/double
数据类型不适合“货币!”
考虑SQL数据库(以及,嗯,COBOL
程序......)如何通常存储“货币”值:它们使用某些十进制表示分类。例如,真正的COBOL
程序可能使用“二进制编码的十进制(BCD)”数据类型。 Microsoft Access数据库使用“缩放整数”:美元和美分值乘以10,000,在小数点右侧给出固定(!)“4位数。”
对于这个问题的直接目的,我肯定会将值存储为字符串,然后将非常认真考虑要存储的数字和如何处理“舍入”到该位数。 (例如,有一些算法,如“银行家的四舍五入”。)
“存储空间大小?”您不关心它。您做关心的是,如果特定客户(或审核员......)实际上将所有数字加在打印的对帐单上,那么底线在那张纸上会同意......在(!)至少,在一分钱内。