java和数据库里用什么形式存储表达分数数字?

昵称必须填 发布于 2015/04/30 11:28
阅读 2K+
收藏 0

【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”

在财务计算中,经常会用到分数,有的分数可以用有限位小数表示,有的分数就是无限位数的,如果设置一定的精度改成小数表示,在不断的计算中(比如先用这个精度的计算,结果再和别的数据做了各种运算),最终结果和直接用分数总会有少许的差别。


我目前项目里,遇到了这样的问题。
在早期,金额设置为2位小数,天数设置为6位小数,单价设置为两位小数,汇率设置4位小数,因为业务量不大,经营效益也还好,所以偶尔差个几元几分的用户也觉得没问题。


现在效益不行了,财务监管严格,差1分都不行,但是软件系统也用了5年以上了,用户提出用分数对中间数据进行保存,最终结果才做精度和四舍五入的设置。


可是,貌似现在java语言和关系数据库里,都没有分数的合适的表达形式,请高手指点。谢谢了!
加载中
0
Grrrr
Grrrr

2个字段,分子,分母

对应java对象

public class Fraction {
private int numerator;//分子
private int denominator;//分母

public float getValue(int digit){
//根据传进来的位数进行四舍五入计算。。。
}

//getter and setter
}

或者可以直接用apache的Math项目(http://commons.apache.org/proper/commons-math/),里面有对分数的运算和表示。

分数的API在这里:http://commons.apache.org/proper/commons-math/userguide/fraction.html


0
归海一刀
归海一刀
我觉得提高精度位数,另外就是在计算的时候合理处理业务逻辑。在最终的结果才进行四舍五入。
昵称必须填
昵称必须填
我也是这么想的。如果运算过程不太复杂,可以采用这种方式。要是运算太多,绕来绕去的,中间值和最终值都要保存,有时候编程不注意,把中间值拿来计算,就会存在误差。
0
归海一刀
归海一刀
mysql中有货币类型
0
昵称必须填
昵称必须填
谢谢楼上几位。我们是as400 db2数据库.
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部