java 类型转换时需要注意的问题

近期维护前人留下的 "chongqingdaxue的缴费平台", 前后碰到两次java类型转换的问题, 这样导致的 bug 非常不应该, 应避免.

1. String 转 Integer

代码功能: 从一个 excel 表格读出 count 列的值(count 列的值肯定是整数写入的)

原代码: 从 count 列读出一个 string 值, 再使用 Integer.parseInt(count) 转成 Integer

隐含问题: excel 里会自动对千位以上的数字加上逗号分隔, 如 1234 会转成 1,234, 这时再使用 Integer.parseInt(count) 就会报错

解决方法: 

NumberFormat nf= NumberFormat.getInstance();

nf.parse(count).intValue();

思考: 能不能对肯定是整数的列, 进行读取时, 直接以整数读出来, 而不是先读成 String, 再进行转换?

注: 原代码是用 jxl.Workbook 对 excel 进行读取的, 具体读取某一个 cell 时, 是用 jxl.Cell 的 getContents() 函数进行读取的, 看了一遍, 没看到类似  delphi 的OraQuery 里面有直接 AsInteger 这样的函数, 而是只能以 String 读出来后, 再转成 Integer.

 

2. Double 精度问题

代码功能: xingyeyinhang要求其手续费需要以一位精度的小数传递(手续费计算公式为: 缴费金额*0.0002 )

原代码: 直接使用 缴费金额*0.002

隐含问题: 当"缴费金额" 为 100, 500 时, 都不会有问题, 如 500*0.002 会算出 1.0 ; 但如果是 11700.0*0.002 就会算出 23.400000000000002 .

解决方法:

DecimalFormat df = new DecimalFormat("#.0");
Double.parseDouble(df.format(chargeFee));

转载于:https://my.oschina.net/zenglingfan/blog/61840

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值