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));

你可能感兴趣的:(java,DecimalFormat,NumberFormat)