浏览 3566 次
锁定老帖子 主题:金额转换常用方法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-27
相关的接口,一般接口对传递的金额都会有相关的要求,一般都是以 分为单位,要转换其实并不难,但很多情况下就是怕出错,钱啊!! 所以小心了还得小心,金额中最忌讳的就是double和int的混合运算 了,本机上不出问题,草草测试的后果就不堪设想,用户的数据千奇 百怪,一不小心就是大问题,我这里写了两个常用的方法,我的想法 是减少运算,尽量是字符串操作,减少出错!仅供参考! 希望在这里能抛砖引玉! /** * 将以分为单位的字符串转换为double类型 * @param s * @return */ public static double str2Double(String s) { double r = 0.0; int k = Integer.parseInt(s); String ss = String.format("%1$012d", k); System.out.println(ss); StringBuffer sb = new StringBuffer(); sb.append(ss.substring(0, 10)); sb.append("."); sb.append(ss.substring(10)); r = Double.parseDouble(sb.toString()); return r; } /** * 拿取去掉小数点的金额 * @param amount * @return */ public static String getAmountStr(double amount) { //amount*100不能超过int的最大值 订单交易金额,12位长度,左补0,必填,单位为分 String TransAmt = ""; String amountStr = amount+""; int _tempAmt = Integer.parseInt(amountStr.replaceAll("\\.","")); if(amountStr.matches("[0-9]+\\.[0-9]{2}")){ TransAmt = String.format("%1$012d", _tempAmt); } else if(amountStr.matches("[0-9]+\\.[0-9]{1}")) { TransAmt = String.format("%1$011d0", _tempAmt); } else if(amountStr.matches("[0-9]+")) { TransAmt = String.format("%1$010d00", _tempAmt); } return TransAmt.replaceAll("^0+", ""); } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-12-27
拜托,浮点数的精确运算在各个语言中一般都提供专门的对象或者函数。Java中BigDecimal就是专门干这个的。其他语言也有类似的对象或者函数。所以你这个完全没必要。
|
|
返回顶楼 | |
发表时间:2009-12-28
正则学的不错,但是....
哎!头回见这样的java工人 |
|
返回顶楼 | |
发表时间:2010-01-18
魔力猫咪 写道 拜托,浮点数的精确运算在各个语言中一般都提供专门的对象或者函数。Java中BigDecimal就是专门干这个的。其他语言也有类似的对象或者函数。所以你这个完全没必要。 你可能误解我的意思了,如果你做个支付的接口就知道这两个函数比较重要了,这里说的并不是数值的运算! |
|
返回顶楼 | |
发表时间:2010-01-18
jayo 写道 魔力猫咪 写道 拜托,浮点数的精确运算在各个语言中一般都提供专门的对象或者函数。Java中BigDecimal就是专门干这个的。其他语言也有类似的对象或者函数。所以你这个完全没必要。 你可能误解我的意思了,如果你做个支付的接口就知道这两个函数比较重要了,这里说的并不是数值的运算! 不明白?难道说是客户端的数据总传错的? |
|
返回顶楼 | |
发表时间:2010-06-24
魔力猫咪 写道 jayo 写道 魔力猫咪 写道 拜托,浮点数的精确运算在各个语言中一般都提供专门的对象或者函数。Java中BigDecimal就是专门干这个的。其他语言也有类似的对象或者函数。所以你这个完全没必要。
你可能误解我的意思了,如果你做个支付的接口就知道这两个函数比较重要了,这里说的并不是数值的运算! 不明白?难道说是客户端的数据总传错的? 在接口传送 的时候,对方要某种格式的,用这种方法还是有用的 |
|
返回顶楼 | |