如何在C中表示货币或金钱

前端之家收集整理的这篇文章主要介绍了如何在C中表示货币或金钱前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
TL; DR1什么是在C中代表货币或金钱的准确和可维护的方法

问题背景:
这已经回答了其他一些语言,但是我找不到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程序中的货币的适当的数据类型.

我应该用什么来代表C中的钱,为什么这种方法比其他方法更好?

1这个问题以较短的形式开始,但收到的反馈表明需要澄清这个问题.

解决方法

使用整数数据类型(long long,long,int)或BCD(二进制编码十进制)算术库.你应该存储你显示的最小数量的十分之一或百分之几.也就是说,如果您使用美元并提供美分(百分之一美分),您的数值应该是代表磨坊或毫克(十分之一或百分之一)的整数.额外的重要数字将确保您的兴趣和类似的计算一致.

如果使用整数类型,请确保其范围足够大以处理关注的数量.

猜你在找的C&C++相关文章