去掉BigDecimal类型变量⼩数点后多余的零业务背景:mysql中A表中的B字段的类型是decimal类型,⼩数位数是三位,某⼀条数据的值是3000000,在Java中查询出来的结果是3000000.000,这样显⽰在页⾯中不太好看,⽤户希望看到是3000000。
解决办法:使⽤ stripTrailingZeros().toPlainString()来解决。下⾯举例说明如何去掉BigDecimal类型变量⼩数点后多余的零:BigDecimal testData = new BigDecimal("3000000.000");
System.out.println("直接转换成字符串后输出:" + String());
System.out.println("去掉尾部⽆⽤的零并转换成字符串后输出:" + testData.stripTrailingZeros().toString());
System.out.println("只展⽰数值:" + testData.stripTrailingZeros().toPlainString());
System.out.println("⼯程计数法输出:" + testData.stripTrailingZeros().toEngineeringString());
测试结果:
直接转换成字符串后输出:3000000.00
去掉尾部⽆⽤的零转并转换成字符串后输出:3E+6
只展⽰数值:3000000
⼯程计数法输出:3E+6
但是,如果将3000000.000改为3000000.700等,⼩数点后⾯有⾮零数字的场景,则stripTrailingZeros().toString()不会输出为科学计数法。
bigdecimal除法保留小数toString(),toPlainString(),toEngineeringString() 这三个⽅法都是⽤于将BigDecimal 转换成字符串,不同之处是toString()有可能会使⽤科学记数法,toPlainString()只展⽰数值,不使⽤科学记数法,toEngineeringString()⼯程计数法,与科学技术法类似,但要求10的幂必须是3的倍数。
toPlainString toString toEngineeringString
1000  1 * 10^3  1 * 10^3
10000  1 * 10^410 * 10^3
100000  1 * 10^5100 * 10^3
1000000  1 * 10^6  1 * 10^6
但是,下⾯的⽅法不可以使⽤stripTrailingZeros()去除末尾⽆⽤的零,只能⼿动转换。
public static void main(String[] args) {
BigDecimal ratio= new BigDecimal("0.00");
System.out.println(ratio.stripTrailingZeros().toPlainString());
// ⾃⾏判断,判断相等的时候,使⽤comparTo(),equals()不靠谱
if (0 == BigDecimal.ZEROpareTo(ratio)) {
System.out.println("0");
}
if (!BigDecimal.ZERO.equals(ratio)) {
System.out.println(" 居然不相等 ");
}
}
总结:BigDecimal是处理⾼精度的浮点数运算的常⽤的⼀个类,当需要将BigDecimal中保存的浮点数值打印出来,特别是在页⾯上显⽰的时候,就有可能遇到意料之外的科学技术法表⽰的问题。stripTrailingZeros()可以去除⼩数点后多余的0,⽤科学记数法表⽰,再结合toPlainString()即可输出数值。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。