多币种换算时的误差如何解决?
在开发一个类似于进销存的系统时碰到这样一个问题:
假设人民币和美元的汇率是7.82。
有一个商品“杯子”,人民币单价是100元整。一个采购订单原来是以美元结算,此时“杯子”的单价就是12.7877美元(100/7.82=12.***********,,,,,保留前4位);然后又把币种改回人民币,此时“杯子”的单价就是99.999814(12.7877 * 7.82),而不是100了。导致价格上有误差。
请问该如何解决?
我能想到的一种办法是在单据中始终保留默认币种的价格,比如说人民币,每次换算都以此进行计算,能够避免误差。还有别的办法吗?因为这样会导致对系统DB的重新调整,需要增加一个字段。。。
谢谢!
参考答案:浮点运算是步精确的,有两种解决办法:
1、使用整数类型进行运算,单位一律使用最小的,比如分
2、使用可以精确计算小数的数据类型,比如Java中的BigDecimal