Java 删除BigDecimal中逗号后面的前导零

Java 删除BigDecimal中逗号后面的前导零,java,bigdecimal,Java,Bigdecimal,我有两个大小数,我想删除两个数字相同数量的前导零,即使是逗号后面的数字。没有昂贵的toString转换,有没有办法做到这一点? 下面是一些我希望它看起来像什么的例子: 0.0004->0.4 逗号后面有3个零,因此我想删除另一个逗号上的3个零: 0.00003->0.03尝试DecimalFormat,查看url 像下面这样玩游戏 DecimalFormat nf = new DecimalFormat("##,###.###"); nf.setParseBigDecimal(true); B

我有两个大小数,我想删除两个数字相同数量的前导零,即使是逗号后面的数字。没有昂贵的toString转换,有没有办法做到这一点? 下面是一些我希望它看起来像什么的例子:

0.0004->0.4

逗号后面有3个零,因此我想删除另一个逗号上的3个零:


0.00003->0.03

尝试DecimalFormat,查看url

像下面这样玩游戏

DecimalFormat nf = new DecimalFormat("##,###.###");
nf.setParseBigDecimal(true);
BigDecimal bd = ((BigDecimal) nf.parse("10,233.907")).setScale(3,BigDecimal.ROUND_HALF_UP);

尝试DecimalFormat,查看url

像下面这样玩游戏

DecimalFormat nf = new DecimalFormat("##,###.###");
nf.setParseBigDecimal(true);
BigDecimal bd = ((BigDecimal) nf.parse("10,233.907")).setScale(3,BigDecimal.ROUND_HALF_UP);

尝试DecimalFormat,查看url

像下面这样玩游戏

DecimalFormat nf = new DecimalFormat("##,###.###");
nf.setParseBigDecimal(true);
BigDecimal bd = ((BigDecimal) nf.parse("10,233.907")).setScale(3,BigDecimal.ROUND_HALF_UP);

尝试DecimalFormat,查看url

像下面这样玩游戏

DecimalFormat nf = new DecimalFormat("##,###.###");
nf.setParseBigDecimal(true);
BigDecimal bd = ((BigDecimal) nf.parse("10,233.907")).setScale(3,BigDecimal.ROUND_HALF_UP);

我认为您可以使用
movePointRight
方法。以下是
javarepl
输出

java> BigDecimal a = new BigDecimal("0.0004");
java.math.BigDecimal a = 0.0004
java> a.movePointRight(3);
java.math.BigDecimal res2 = 0.4
java> BigDecimal b = new BigDecimal("0.00003");
java.math.BigDecimal b = 0.00003
java> b.movePointRight(3);
java.math.BigDecimal res4 = 0.03

我认为您可以使用
movePointRight
方法。以下是
javarepl
输出

java> BigDecimal a = new BigDecimal("0.0004");
java.math.BigDecimal a = 0.0004
java> a.movePointRight(3);
java.math.BigDecimal res2 = 0.4
java> BigDecimal b = new BigDecimal("0.00003");
java.math.BigDecimal b = 0.00003
java> b.movePointRight(3);
java.math.BigDecimal res4 = 0.03

我认为您可以使用
movePointRight
方法。以下是
javarepl
输出

java> BigDecimal a = new BigDecimal("0.0004");
java.math.BigDecimal a = 0.0004
java> a.movePointRight(3);
java.math.BigDecimal res2 = 0.4
java> BigDecimal b = new BigDecimal("0.00003");
java.math.BigDecimal b = 0.00003
java> b.movePointRight(3);
java.math.BigDecimal res4 = 0.03

我认为您可以使用
movePointRight
方法。以下是
javarepl
输出

java> BigDecimal a = new BigDecimal("0.0004");
java.math.BigDecimal a = 0.0004
java> a.movePointRight(3);
java.math.BigDecimal res2 = 0.4
java> BigDecimal b = new BigDecimal("0.00003");
java.math.BigDecimal b = 0.00003
java> b.movePointRight(3);
java.math.BigDecimal res4 = 0.03

取较大的数字,在与
0.1
比较时迭代应用,以了解何时停止。然后在较小的数字上向右移动相同数量的点。

取较大的数字,迭代应用,同时与
0.1
进行比较,以了解何时停止。然后在较小的数字上向右移动相同数量的点。

取较大的数字,迭代应用,同时与
0.1
进行比较,以了解何时停止。然后在较小的数字上向右移动相同数量的点。

取较大的数字,迭代应用,同时与
0.1
进行比较,以了解何时停止。然后在较小的数字上向右移动相同数量的点。

这里是一个快速建议

    BigDecimal a = new BigDecimal("0.0004");
    BigDecimal b = new BigDecimal("10000.000003");
    final BigInteger aInteger = a.abs().toBigInteger();
    final BigDecimal aDecimal = a.subtract(new BigDecimal(aInteger));
    final BigInteger bInteger = b.abs().toBigInteger();
    final BigDecimal bDecimal = b.subtract(new BigDecimal(bInteger));
    final BigDecimal x = aDecimal.compareTo(bDecimal) > 1 ? b : a;
    BigDecimal DECIMAL = x.subtract(new BigDecimal(x.abs().toBigInteger()));
    int count = 0;
    final BigDecimal one = new BigDecimal(1);
    while (DECIMAL.multiply(new BigDecimal(10)).compareTo(one) < 0) {
        count++;
        DECIMAL = DECIMAL.multiply(new BigDecimal(10));
    }
    a = new BigDecimal(aInteger).add(aDecimal.movePointRight(count));
    b = new BigDecimal(bInteger).add(bDecimal.movePointRight(count));
    System.out.println("a =" + a + "  b = " + b);
BigDecimal a=新的BigDecimal(“0.0004”);
BigDecimal b=新的BigDecimal(“10000.000003”);
最终大整数aInteger=a.abs().toBigInteger();
最终的双十进制小数=a.subtract(新的双十进制(aInteger));
final biginger bInteger=b.abs().tobiginger();
final BigDecimal bDecimal=b.subtract(新的BigDecimal(bInteger));
final BigDecimal x=aDecimal.compareTo(bDecimal)>1?b:a;
BigDecimal DECIMAL=x.subtract(新的BigDecimal(x.abs().toBigInteger());
整数计数=0;
最终的BigDecimal 1=新的BigDecimal(1);
while(十进制.乘法(新的BigDecimal(10)).compareTo(一)<0){
计数++;
十进制=十进制。乘法(新的BigDecimal(10));
}
a=新的BigDecimal(aInteger).add(aDecimal.movePointRight(count));
b=新的BigDecimal(bInteger).add(bDecimal.movePointRight(count));
System.out.println(“a=“+a+”b=“+b”);

你可以做得更好这里有一个简单的建议

    BigDecimal a = new BigDecimal("0.0004");
    BigDecimal b = new BigDecimal("10000.000003");
    final BigInteger aInteger = a.abs().toBigInteger();
    final BigDecimal aDecimal = a.subtract(new BigDecimal(aInteger));
    final BigInteger bInteger = b.abs().toBigInteger();
    final BigDecimal bDecimal = b.subtract(new BigDecimal(bInteger));
    final BigDecimal x = aDecimal.compareTo(bDecimal) > 1 ? b : a;
    BigDecimal DECIMAL = x.subtract(new BigDecimal(x.abs().toBigInteger()));
    int count = 0;
    final BigDecimal one = new BigDecimal(1);
    while (DECIMAL.multiply(new BigDecimal(10)).compareTo(one) < 0) {
        count++;
        DECIMAL = DECIMAL.multiply(new BigDecimal(10));
    }
    a = new BigDecimal(aInteger).add(aDecimal.movePointRight(count));
    b = new BigDecimal(bInteger).add(bDecimal.movePointRight(count));
    System.out.println("a =" + a + "  b = " + b);
BigDecimal a=新的BigDecimal(“0.0004”);
BigDecimal b=新的BigDecimal(“10000.000003”);
最终大整数aInteger=a.abs().toBigInteger();
最终的双十进制小数=a.subtract(新的双十进制(aInteger));
final biginger bInteger=b.abs().tobiginger();
final BigDecimal bDecimal=b.subtract(新的BigDecimal(bInteger));
final BigDecimal x=aDecimal.compareTo(bDecimal)>1?b:a;
BigDecimal DECIMAL=x.subtract(新的BigDecimal(x.abs().toBigInteger());
整数计数=0;
最终的BigDecimal 1=新的BigDecimal(1);
while(十进制.乘法(新的BigDecimal(10)).compareTo(一)<0){
计数++;
十进制=十进制。乘法(新的BigDecimal(10));
}
a=新的BigDecimal(aInteger).add(aDecimal.movePointRight(count));
b=新的BigDecimal(bInteger).add(bDecimal.movePointRight(count));
System.out.println(“a=“+a+”b=“+b”);

你可以做得更好这里有一个简单的建议

    BigDecimal a = new BigDecimal("0.0004");
    BigDecimal b = new BigDecimal("10000.000003");
    final BigInteger aInteger = a.abs().toBigInteger();
    final BigDecimal aDecimal = a.subtract(new BigDecimal(aInteger));
    final BigInteger bInteger = b.abs().toBigInteger();
    final BigDecimal bDecimal = b.subtract(new BigDecimal(bInteger));
    final BigDecimal x = aDecimal.compareTo(bDecimal) > 1 ? b : a;
    BigDecimal DECIMAL = x.subtract(new BigDecimal(x.abs().toBigInteger()));
    int count = 0;
    final BigDecimal one = new BigDecimal(1);
    while (DECIMAL.multiply(new BigDecimal(10)).compareTo(one) < 0) {
        count++;
        DECIMAL = DECIMAL.multiply(new BigDecimal(10));
    }
    a = new BigDecimal(aInteger).add(aDecimal.movePointRight(count));
    b = new BigDecimal(bInteger).add(bDecimal.movePointRight(count));
    System.out.println("a =" + a + "  b = " + b);
BigDecimal a=新的BigDecimal(“0.0004”);
BigDecimal b=新的BigDecimal(“10000.000003”);
最终大整数aInteger=a.abs().toBigInteger();
最终的双十进制小数=a.subtract(新的双十进制(aInteger));
final biginger bInteger=b.abs().tobiginger();
final BigDecimal bDecimal=b.subtract(新的BigDecimal(bInteger));
final BigDecimal x=aDecimal.compareTo(bDecimal)>1?b:a;
BigDecimal DECIMAL=x.subtract(新的BigDecimal(x.abs().toBigInteger());
整数计数=0;
最终的BigDecimal 1=新的BigDecimal(1);
while(十进制.乘法(新的BigDecimal(10)).compareTo(一)<0){
计数++;
十进制=十进制。乘法(新的BigDecimal(10));
}
a=新的BigDecimal(aInteger).add(aDecimal.movePointRight(count));
b=新的BigDecimal(bInteger).add(bDecimal.movePointRight(count));
System.out.println(“a=“+a+”b=“+b”);

你可以做得更好这里有一个简单的建议

    BigDecimal a = new BigDecimal("0.0004");
    BigDecimal b = new BigDecimal("10000.000003");
    final BigInteger aInteger = a.abs().toBigInteger();
    final BigDecimal aDecimal = a.subtract(new BigDecimal(aInteger));
    final BigInteger bInteger = b.abs().toBigInteger();
    final BigDecimal bDecimal = b.subtract(new BigDecimal(bInteger));
    final BigDecimal x = aDecimal.compareTo(bDecimal) > 1 ? b : a;
    BigDecimal DECIMAL = x.subtract(new BigDecimal(x.abs().toBigInteger()));
    int count = 0;
    final BigDecimal one = new BigDecimal(1);
    while (DECIMAL.multiply(new BigDecimal(10)).compareTo(one) < 0) {
        count++;
        DECIMAL = DECIMAL.multiply(new BigDecimal(10));
    }
    a = new BigDecimal(aInteger).add(aDecimal.movePointRight(count));
    b = new BigDecimal(bInteger).add(bDecimal.movePointRight(count));
    System.out.println("a =" + a + "  b = " + b);
BigDecimal a=新的BigDecimal(“0.0004”);
BigDecimal b=新的BigDecimal(“10000.000003”);
最终大整数aInteger=a.abs().toBigInteger();
最终的双十进制小数=a.subtract(新的双十进制(aInteger));
final biginger bInteger=b.abs().tobiginger();
final BigDecimal bDecimal=b.subtract(新的BigDecimal(bInteger));
final BigDecimal x=aDecimal.compareTo(bDecimal)>1?b:a;
BigDecimal DECIMAL=x.subtract(新的BigDecimal(x.abs().toBigInteger());
整数计数=0;
最终的BigDecimal 1=新的BigDecimal(1);
while(十进制.乘法(新的BigDecimal(10)).compareTo(一)<0){
计数++;
十进制=十进制。乘法(新的BigDecimal(10));
}
a=新的BigDecimal(aInteger).add(aDecimal.movePointRight(count));
b=新的BigDecimal(bInteger).add(bDecimal.movePointRight(count));
System.out.println(“a=“+a+”b=“+b”);

你可以做得更好

你的意思是,你想把数字乘以十的幂吗?@MarkoTopolnik是的,但两个数字都不应该大于10。我必须确定两个n中的0的数量