我想从
java中的bigdecimal中提取整数部分和小数部分.
我正在使用以下代码.
BigDecimal bd = BigDecimal.valueOf(-1.30) String textBD = bd.toPlainString(); System.out.println("length = "+textBD.length()); int radixLoc = textBD.indexOf('.'); System.out.println("Fraction "+textBD.substring(0,radixLoc)+"Cents: " + textBD.substring(radixLoc + 1,textBD.length()));
我得到的输出为
-1和3
但我希望尾随零也从-1.30开始
输出应为-1和30
解决方法
-1.30的浮点表示不准确.以下是对代码的略微修改:
BigDecimal bd = new BigDecimal("-1.30").setScale(2,RoundingMode.HALF_UP); String textBD = bd.toPlainString(); System.out.println("text version,length = <" + textBD + ">," + textBD.length()); int radixLoc = textBD.indexOf('.'); System.out.println("Fraction " + textBD.substring(0,radixLoc) + ". Cents: " + textBD.substring(radixLoc + 1,textBD.length()));
我已经在setScale上放置了一个RoundingMode来将小部分便士分成1.295“一半上升”到1.30.
结果是:
text version,length = <-1.30>,5 Fraction -1. Cents: 30