OpenERP的小数精度问题
-
以销售订单上的价格计算为例说明。
系统可以设置:1)销售价格的小数位数;2)财务数据的小数位数;3)币种换算的精确度。前两者的设置,版本V6.1中在菜单“setting->customization->database structure->decimal accurancy”中设置。后者的设置在菜单“Accouting -> Configuration -> Miscellaneous -> Currencies”中设置。
销售订单上产品行上的价格小记及订单上的价格总计的计算规则是:
1)产品单价的小数位数是系统设置的“销售价格的小数位数”;
2)价格小记的计算是,a)单价*数量,b)税额计算,根据价内税和价外税的不同,a中的结果要扣除税额,税额计算结果的小数位数是系统设置的“财务数据的小数位数”,c)币种换算,b中计算的结果还要按该订单的币种上设定的精度进行取舍。
因此,价格小记的最终结果,和“1)销售价格的小数位数;2)财务数据的小数位数;3)币种换算的精确度”三者的设置都相关。订单上的价格总计的结果,同理和三者的设置相关。
此外,界面上的价格显示,编辑状态的时候,系统会正确的显示实际小数位数,但在只读状态的时候,系统只会显示2位小数位数。经查,原因在于代码文件:OpenERP 6.1-1\server\openerp\addons\web\static\src\js\formats.js中,浮点数默认是按2位显示,修改该代码中的默认位数即可正确显示。