知乎专栏 |
package cn.netkiller.example; import java.math.BigDecimal; public class BigDecimalTest { public BigDecimalTest() { // TODO Auto-generated constructor stub } public static void main(String[] args) { // TODO Auto-generated method stub BigDecimal first = new BigDecimal("1.0"); BigDecimal second = new BigDecimal("1.77"); System.out.println(String.format("%s, %s", first, second)); if (first.equals(second)) System.out.println("equals: true"); else System.out.println("equals: false"); if (first.compareTo(second) == 0) System.out.println("compareTo: true"); else System.out.println("compareTo: false"); BigDecimal zero = new BigDecimal("0"); BigDecimal one = new BigDecimal("1"); BigDecimal minus = new BigDecimal("-1"); if (zero.compareTo(one) < 0) System.out.println("比較演算子[ < ]: true"); if (one.compareTo(one) == 0) System.out.println("比較演算子[ == ]: true"); if (zero.compareTo(minus) > 0) System.out.println("比較演算子[ > ]: true"); if (zero.compareTo(minus) >= 0) System.out.println("比較演算子[ >= ]: true"); if (zero.compareTo(minus) != 0) System.out.println("比較演算子[ != ]: true"); if (zero.compareTo(one) <= 0) System.out.println("比較演算子[ <= ]: true"); } }
有时会输出 1E+2,如果你不希望这种科学计数法输出可以使用 toPlainString() 替代 toString() System.out.println( new BigDecimal("100.000").stripTrailingZeros().toPlainString());
package cn.netkiller.example.test; import java.math.BigDecimal; import java.math.BigInteger; public class Test { public Test() { // TODO Auto-generated constructor stub } public static void main(String[] args) { // TODO Auto-generated method stub int decimal = 4; BigInteger amount = BigInteger.valueOf(10000000000L); BigDecimal balance = new BigDecimal(amount); BigDecimal point = new BigDecimal(0.1 / Math.pow(10, decimal)); balance = balance.multiply(point); System.out.println(balance); } }
发现输出有问题 100000.000000000008180305391403130954586231382563710212707519531250000000000
换种方法
package cn.netkiller.example.test; import java.math.BigDecimal; import java.math.BigInteger; public class Test { public Test() { // TODO Auto-generated constructor stub } public static void main(String[] args) { // TODO Auto-generated method stub // String i = Integer.valueOf("0x57c457",16).toString(); // System.out.println(i); int decimal = 6; BigInteger amount = BigInteger.valueOf(10000000000L); System.out.println(amount); String tmp = amount.toString(); String number = new StringBuffer(tmp).insert(tmp.length() - decimal, ".").toString(); BigDecimal balance = new BigDecimal(number); System.out.println(balance); } }
最佳方案
int decimal = 6; System.out.println(BigDecimal.TEN.pow(decimal)); BigDecimal balance1 = new BigDecimal("1234"); BigDecimal value = balance1.divide(BigDecimal.TEN.pow(decimal)); System.out.println(value); BigDecimal balance2 = new BigDecimal("12.107"); BigDecimal value2 = balance2.multiply(BigDecimal.TEN.pow(decimal)).setScale(0, RoundingMode.DOWN); System.out.println(value2);