如何在C中表示货币或金钱
TL; DR1什么是在C中代表货币或金钱的准确和可维护的方法?
问题背景: > C#What data type should I use to represent money in C#? 注意:对于其他语言,还有更多类似的问题,我只是为了表示目的而拉了几个. 所有这些问题都可以简化为“使用十进制数据类型”,其中特定类型可能会根据语言而有所不同. 有一个related question最终建议使用“固定点”方法,但没有一个答案在C中使用特定的数据类型. 同样,我看过诸如GMP之类的任意精确库,但是对我来说,这是不是最好的使用方法呢不清楚. 简化假设: >假定一个基于x86或x64的架构,但请提出任何会影响基于RISC架构的假设,例如电源芯片或手机芯片. 与其他问题的区别 如上所述,这种类型的问题之前已经被问及其他多种语言.这个问题与其他问题有所不同,有几个原因. 使用从Why not use Double or Float to represent currency?接受的答案,我们来强调差异.
重点强调两个建议的解决方案 第一个解决方案本质上是“固定点”方法的变体.该解决方案存在一个问题,因为建议的范围(跟踪分数)不足以进行基于工厂的计算,重要信息将在四舍五入时丢失. 另一个解决方案是使用C中不可用的本机十进制类. 同样,答案不考虑其他选项,例如创建一个用于处理这些计算的结构或使用任意精度库.这些是可以理解的差异,因为Java没有结构,为什么在语言中有本地支持时考虑第三方库. 这个问题与这个问题和其他相关的问题不同,因为C没有相同级别的本机类型支持,并且具有其他语言没有的语言特性.而且我还没有看到任何其他问题解决了在C中可以接近的多种方式. 问题: 我应该用什么来代表C中的钱,为什么这种方法比其他方法更好? 1这个问题以较短的形式开始,但收到的反馈表明需要澄清这个问题. 解决方法
使用整数数据类型(long long,long,int)或BCD(二进制编码十进制)算术库.你应该存储你显示的最小数量的十分之一或百分之几.也就是说,如果您使用美元并提供美分(百分之一美分),您的数值应该是代表磨坊或毫克(十分之一或百分之一)的整数.额外的重要数字将确保您的兴趣和类似的计算一致.
如果使用整数类型,请确保其范围足够大以处理关注的数量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |