| 知乎专栏 |
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);