返回双型而不尝试零

问题描述

我正在尝试返回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.S。我不想在这里返回字符串值。

解决方法

“尾随零”仅与浮点或双数的字符串表示有关。

由于尾​​随零不会影响数字的值,因此浮点数或双精度数中存储的数据保持不变。例如,“ 3.4”和“ 3.4000”是同一数字,只是该数字的两种不同表示形式,例如“ 3.4 e + 00”仍然是显示该数字的另一种方式。

,

您可以使用 stripTrailingZeros ,它是Java中的内置方法,该方法在删除尾随零后返回BigDecimal

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

如果将int值分配给double变量,则默认情况下始终以尾随零表示。您有两种选择:

  1. 将其格式化为所需的字符串。

  2. 将其转换为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