多币种换算时的误差如何解决?

来源:百度知道 编辑:UC知道 时间:2024/06/03 02:46:07
在开发一个类似于进销存的系统时碰到这样一个问题:

假设人民币和美元的汇率是7.82。
有一个商品“杯子”,人民币单价是100元整。一个采购订单原来是以美元结算,此时“杯子”的单价就是12.7877美元(100/7.82=12.7877237851,,,,,保留前4位);然后又把币种改回人民币,此时“杯子”的单价就是99.999814(12.7877 * 7.82),而不是100了。导致价格上有误差。

请问该如何解决?

我能想到的一种办法是在单据中始终保留默认币种的价格,比如说人民币,每次换算都以此进行计算,能够避免误差。还有别的办法吗?因为这样会导致对系统DB的重新调整,需要增加一个字段。。。

谢谢!

浮点运算是步精确的,有两种解决办法:
1、使用整数类型进行运算,单位一律使用最小的,比如分
2、使用可以精确计算小数的数据类型,比如Java中的BigDecimal

在系统中定义一个常量,该常量是你系统货币精确值得二分之一,如果计算出来的数小于这个常量则,取逼近该值的数,如:$12.7877精确到$0.0001,则$常量取$0.00005,¥99.999814,精确到$0.0001/7.82,则$常量取$0.00005/7.82;
当你计算出的值和你想要的值有微小误差时用这个常量作标准进行比较就行了