TL; DR 什么是用于表示用C的货币或货币准确和维护的方法?如何代表货币或货币使用C
背景的问题:
这已经回答了许多其他语言,但我无法找到C语言的坚实答案。
Objective-C的How to represent money in Objective-C/iOS?
注意:其他语言还有很多类似的问题,我只是为了表示目的而拉了几个。
所有这些问题都可以归结为“使用decimal
数据类型”,其中具体类型可能因语言而异。
有一个related question其最终使用“固定点”的方法暗示,但没有答案的地址中C.使用特定数据类型
同样地,我已经看过任意精度库如GMP ,但是我不清楚这是否是最好的使用方法。
简化的假设:
假定一个基于x86或x64体系结构,但请拨打了会影响基于RISC架构,如电源芯片或手臂的任何假设芯片。
计算的准确性是主要的要求。 Ease of maintenance将是下一个要求。计算速度很重要,但是对其他要求来说是高等的。
计算需要能够安全地支持操作精确到mill以及支持值范围达万亿(10^9)
来自其他问题差异:
如上所述,这种类型的问题之前已经为多个其他语言的要求。由于几个原因,这个问题与其他问题不同。
使用接受的答案:Why not use Double or Float to represent currency?,让我们强调一下差异。
(解决方案1 ),在几乎任何语言使用整数,而是和伯爵美分有效的解决方案。例如,1025将是10.25美元。几种语言也有内置类型来处理金钱。 (解决方案2)其中,Java有BigDecimal类,C#有十进制类型。
着重强调突出两个建议的解决方案
第一溶液基本上“固定点”的方法的一个变种。这个解决方案存在一个问题,建议的范围(追踪分)不足以用于基于工厂的计算,并且舍入时会丢失重要的信息。
另一解决方案是使用一个本机decimal
类,这是不内C.可用
同样,答案不考虑其它选项,例如用于处理这些计算或使用一个任意精度的库创建一个结构。这些都是可以理解的差异,因为Java没有结构,为什么在语言中有本地支持时考虑使用第三方库。
这个问题不同于该问题和其他相关问题,因为C没有相同级别的本机类型支持,并且具有其他语言不支持的语言功能。而且我还没有看到任何其他的问题解决,这可能在C.可以走近多种方式
问题:
从我的研究,似乎float
不是由于浮点错误,用于在C程序中表示货币的适当数据类型。
我应该用什么来表示C中的金钱,为什么这种方法比其他方法更好?
这个问题从一个简短的表格开始,但收到的反馈意见表明需要澄清问题。
你总是可以使用美分,并使用'int','long'或'long long'。 – rpsml
你也不想重新发明轮子,因为你很容易就会因为某些事情崩溃而太慢。 – edmz
我不知道是否是最好的方法,但我见过几个人使用由两个整数构成的结构,一个用于单位,另一个用于小数。 – wallek876