关于“前导零”的问题记录,也就是(0.1)和.1这种数据处理问题
1、今天排查问题的时候发现页面金额数据显示错误,经过查询发现数据库存的也是有问题的,该功能是导入数据的时候出现的问题,由于数据类型是VARCHAR的,所以任何数据都能导入(导入是封装服务,无法更改或者更改麻烦)
2、导入的时候没处理好导致金额数据忽略小数点前面的0也就是前导零,例如:Excel中数据是0.1、-0.1这种,但是导入数据库变成.1、-.1,这种奇葩数据。但是在利用数据的时候又发现没问题。
3、说明是使用的时候处理的时候会补全?抱着这个想法简单测试了下,一般在处理数据这种都会对数据进行转换,比如常用的Double等,经测试在很多语言环境下,这种String转Double都会进行前导零的补全(以前没怎么注意)。
4、虽然不影响使用,但是这始终是一个问题,所以还是建议在进行存储的时候就处理好,避免数据展示和使用的时候出乱子。
页面展示:
数据库:
测试类,java、JavaScript、python等亦有这种处理
double value = Double.parseDouble("-.88254"); // 结果: -0.88254
BigDecimal value2 = new BigDecimal("-.88254"); // 结果: -0.88254
double value = Double.parseDouble(".434"); // 结果为 0.434
BigDecimal value2 = new BigDecimal(".434"); // 结果同样为 0.434
虽然Java、JavaScript等语言在String转Double时会自动补全前导零不影响使用,但建议在数据存储时就规范处理,避免潜在问题。测试显示Double.parseDouble(.434)和BigDecimal都能正确转换(0.434),但数据源头标准化更可靠。