TL; DR 1用C表示货币或货币的准确且可维护的方法是什么?
问题的背景:
许多其他语言已经回答了这个问题,但我找不到C语言的可靠答案.
Objective-C 如何在Objective-C/iOS中代表钱?
注意:对于其他语言,还有更多类似的问题,我只是为了代表性目的而提出了一些问题.
所有这些问题都可以提炼为"使用decimal数据类型",其中特定类型可能因语言而异.
有一个相关的问题最终建议使用"定点"方法,但没有一个答案使用C中的特定数据类型.
同样,我已经查看过任意精度库,例如GMP,但我不清楚这是否是最好的使用方法.
简化假设:
假设基于x86或x64的架构,但请调出任何可能影响基于RISC的架构(如Power芯片或Arm芯片)的假设.
计算的准确性是主要要求. 易于维护将是下一个要求.计算速度很重要,但与其他要求相比是三级的.
计算需要能够安全地支持对轧机精确的操作以及高达数万亿的支撑值(10 ^ 9)
与其他问题的区别:
如上所述,此类问题之前已被问过多种其他语言.由于几个原因,这个问题与其他问题不同.
使用接受的答案:为什么不使用Double或Float来表示货币?,让我们强调差异.
(解决方案1)几乎可以使用任何语言的解决方案是使用整数,并计算分数.例如,1025将是10.25美元.几种语言也有内置类型来处理钱.(解决方案2)其中,Java具有BigDecimal类,C#具有十进制类型.
重点强调了两个建议的解决方案
第一种解决方案基本上是"定点"方法的变体.该解决方案存在一个问题,即建议的范围(跟踪分数)不足以进行基于轧机的计算,并且在舍入时将丢失重要信息.
另一种解决方案是使用decimalC中不可用的本机类.
同样,答案不考虑其他选项,例如创建用于处理这些计算的结构或使用任意精度库.这些是可以理解的差异,因为Java没有结构,为什么在语言中有本机支持时考虑第三方库.
此问题与该问题和其他相关问题不同,因为C不具有相同级别的本机类型支持,并且具有其他语言不支持的语言功能.我还没有看到任何其他问题解决在C中可以采用的多种方式.
问题:
根据我的研究,float由于浮点错误,似乎不适合用于在C程序中表示货币的数据类型.
我应该用什么来代表C中的钱,为什么这种方法比其他方法更好?
1 此问题以较短的形式开始,但收到的反馈意见表明需要澄清问题.