近期维护前人留下的 "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));