return double类型,无需测试零

ca1c2owp  于 2021-07-06  发布在  Java
关注(0)|答案(3)|浏览(715)

我试图返回double/float值,但没有添加尾随零。
我使用了numberformat和decimalformat,但是一旦我对结果强制转换double或float,它将添加尾随的零(这是预期的)。我想知道有没有办法防止这种情况。

private Double format (double input) {        

        NumberFormat nf = NumberFormat.getIntegerInstance(Locale.US);           
        Double result = null; 
        BigDecimal bd = new BigDecimal(input); 

        if(bd.intValue() > 99){
        //(don't want to add trailing zeros here)
                return (double)bd.intValue();
        }else{
            nf.setMinimumFractionDigits(1);
            nf.setMaximumFractionDigits(1);
            result = Double.parseDouble(nf.format(bd.doubleValue()));
        }
        return result;

p、 我不想在这里返回字符串值。

30byixjq

30byixjq1#

你可以用 stripTrailingZeros 哪个java内置方法返回 BigDecimal 删除尾随零之后。

Double.valueOf(bd.stripTrailingZeros().toPlainString());
tsm1rwdh

tsm1rwdh2#

“尾随零”只是浮点数或双数的字符串表示形式。
由于后面的零不影响数字的值,所以存储在float或double中的数据保持不变。例如,“3.4”和“3.4000”是同一个数字,它只是这个数字的两种不同的表示形式,就像“3.4e+00”仍然是显示同一个数字的另一种方式。

fbcarpbf

fbcarpbf3#

如果你指定一个 int 对a的价值 double 变量,默认情况下,它将始终用尾随的零表示。您有两个选择:
把它格式化成一个字符串。
将其转换为 BigDecimal 然后使用 BigDecimal#stripTrailingZeros 得到一个 BigDecimal 没有后面的零。

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        double x = 5;
        System.out.println(x);

        BigDecimal y = BigDecimal.valueOf(x).stripTrailingZeros();
        System.out.println(y);
    }
}

输出:

5.0
5

相关问题