代码之家  ›  专栏  ›  技术社区  ›  Bitwise DEVS

Kotlin/Java格式化双值

  •  -1
  • Bitwise DEVS  · 技术社区  · 4 年前

    我当前的格式是

    DecimalFormat("#,##0.00").format(value)
    

    我需要处理这样的值

    0.00 //ok
    0.45 //ok
    0.002 //Need to show 0.002 or 0.0020
    0.0003 //Need to show 0.0003 or 0.00030
    0.00004 //Need to show 0.00004 or 0.000040
    0.00234567 //Need to show 0.0023
    

    但是,确保上面的代码在小数部分不起作用,在小数部分中,非零值开始于第千个位置,否则我只会显示 0.00 好像它完全是一个零值。在处理整数时,我仍然希望使用逗号设置上述格式,但也允许在非零开始超过百分之一位时设置格式。

    进一步示例

    0.0492 // 0.04 or 0.05 much better
    700.356 // 700.35 or 700.36 much better
    54232.542234 // 54,232.54
    
    0 回复  |  直到 4 年前
        1
  •  2
  •   UrbanR    4 年前

    尝试将数字乘以10,直到得到两个非零数字。这样你就可以得到小数点的整数。

    之后,使用数字格式将数字格式化如下:

    val format = NumberFormat.getInstance()
    format.maximumFractionDigits = nrOfDecimalPoints
    val formattedNumber = format.format(yourNumber)
    

    这样,您将保留千位分隔符“”,小数点将在两个非零数字后被截断。

    这是自定义函数的外观:

    private fun customFormat(number: Double): String{
        var temp = number - number.toInt()
        temp *= 100
        var nrDec = 2
        if (number <= 0.0){
            return "0.00"
        }
        if (temp >= 1.0){
            val format = NumberFormat.getInstance(Locale.US)
            format.maximumFractionDigits = nrDec
            return format.format(number)
        }
        while (temp < 1.0 && nrDec < 15){
            temp *= 10
            nrDec ++
        }
        if((temp * 10 % 10) != 0.0){
            nrDec++
        }
        val format = NumberFormat.getInstance(Locale.US)
        format.maximumFractionDigits = nrDec
        return format.format(number)
    }
    
        2
  •  1
  •   LenglBoy    4 年前

    您可以这样做,以切割尾迹0:

    public static void main(String []args){
        double number1 = 0.2;
        double number2 = 1.55;
        double number3 = 0.00005;
        double number4 = 0.50000;
        
        DecimalFormat df = new DecimalFormat("###,##0.00#########");
        System.out.println(df.format(number1)); // 0.20
        System.out.println(df.format(number2)); // 1.55
        System.out.println(df.format(number3)); // 0.00005
        System.out.println(df.format(number4)); // 0.50
     }