问题背景:
这已经回答了其他一些语言,但是我找不到C语言的坚实答案.
> C#What data type should I use to represent money in C#?
> Java Why not use Double or Float to represent currency?
> Objective-C How to represent money in Objective-C / iOS?
注意:对于其他语言,还有更多类似的问题,我只是为了表示目的而拉了几个.
所有这些问题都可以简化为“使用十进制数据类型”,其中特定类型可能会根据语言而有所不同.
有一个related question最终建议使用“固定点”方法,但没有一个答案在C中使用特定的数据类型.
同样,我看过诸如GMP之类的任意精确库,但是对我来说,这是不是最好的使用方法呢不清楚.
简化假设:
>假定一个基于x86或x64的架构,但请提出任何会影响基于RISC架构的假设,例如电源芯片或手机芯片.
>计算精度是主要要求. Ease of maintenance将是下一个要求.计算速度很重要,但对其他要求是高等教育.
>计算需要能够安全地支持操作准确到mill以及支持值达到万亿(10 ^ 9)
与其他问题的区别
如上所述,这种类型的问题之前已经被问及其他多种语言.这个问题与其他问题有所不同,有几个原因.
使用从Why not use Double or Float to represent currency?接受的答案,我们来强调差异.
(Solution 1) A solution that works in just about any language is to use integers instead,and count cents. For instance,1025 would be $10.25. Several languages also have built-in types to deal with money. (Solution 2) Among others,Java has the BigDecimal class,and C# has the decimal type.
重点强调两个建议的解决方案
第一个解决方案本质上是“固定点”方法的变体.该解决方案存在一个问题,因为建议的范围(跟踪分数)不足以进行基于工厂的计算,重要信息将在四舍五入时丢失.
另一个解决方案是使用C中不可用的本机十进制类.
同样,答案不考虑其他选项,例如创建一个用于处理这些计算的结构或使用任意精度库.这些是可以理解的差异,因为Java没有结构,为什么在语言中有本地支持时考虑第三方库.
这个问题与这个问题和其他相关的问题不同,因为C没有相同级别的本机类型支持,并且具有其他语言没有的语言特性.而且我还没有看到任何其他问题解决了在C中可以接近的多种方式.
问题:
从我的研究来看,由于浮点错误,float似乎不是用来表示C程序中的货币的适当的数据类型.
1这个问题以较短的形式开始,但收到的反馈表明需要澄清这个问题.