如何使用十进制格式仅在整数中隐藏尾随零

问题描述

我需要这样的格式编号:

23.0 -> 23
23.20 -> 23.20
23.00 -> 23
23.11 -> 23.11
23.2 -> 23.20
23.999 -> 24
23.001 -> 23
1345.999 -> 1346 // Edited the question to add this from the OP's comment

这是我的代码: java:

  public static String toPrice(double number) {
         DecimalFormatSymbols formatSymbols = new DecimalFormatSymbols();
            formatSymbols.setGroupingSeparator(' ');
            DecimalFormat format = new DecimalFormat("#,###,###.##",formatSymbols);
            return format.format(number);
    
         }

kotlin:

fun Double.toPrice(): String =   DecimalFormat("#,DecimalFormatSymbols().apply {
                groupingSeparator = ' '
            }).format(this)

但是对于输入23.20或23.2,我得到的结果是23.2。对我来说这是错误的。我需要23.20。我应该使用哪种字符串模式来实现此结果?请帮帮我。

解决方法

public static String toPrice(double number) {
    if (number == (int) number) {
        return Integer.toString((int) number);
    } else {
        return String.format("%.2f",number);
    }
}

编辑
要包含千位分隔符

public static String toPrice(double number) {
    if (number == (int) number) {
        return String.format("%,d",(int)number);
    } else {
        return String.format("%,.2f",number);
    }
}
,

更新

如果您需要将1345.999格式化为1346(如您的注释中所述),则可以通过在原始答案中添加几个额外的步骤来实现:

  1. 使用#,###,###.00模式设置数字格式,然后删除所有逗号,以便可以将其解析为两倍。
  2. 将转换后的字符串解析为double,然后按照原始答案中的说明执行其余解决方案。

演示:

import java.text.DecimalFormat;
import java.text.NumberFormat;

public class Main {
    public static void main(String[] args) {
        System.out.println(getFromattedNumber(1234567.0));
        System.out.println(getFromattedNumber(1234567.20));
        System.out.println(getFromattedNumber(1234567.01));
        System.out.println(getFromattedNumber(1234567.00));
        System.out.println(getFromattedNumber(1345.999));
    }

    static String getFromattedNumber(double number) {
        NumberFormat format = new DecimalFormat("#,###.00");
        double num = Double.parseDouble(format.format(number).replace(",",""));

        // Format for integer decimal numbers
        NumberFormat formatInt = new DecimalFormat("#,###");

        if ((int) num == num) {
            return formatInt.format(number);
        } else {
            return format.format(number);
        }
    }
}

输出:

1,234,567
1,567.20
1,567.01
1,346

原始答案

您将需要使用以下两种格式:

import java.text.DecimalFormat;
import java.text.NumberFormat;

public class Main {
    public static void main(String[] args) {
        System.out.println(getFromattedNumber(1234567.0));
        System.out.println(getFromattedNumber(1234567.20));
        System.out.println(getFromattedNumber(1234567.01));
        System.out.println(getFromattedNumber(1234567.00));
    }

    static String getFromattedNumber(double number) {
        // Format for integer decimal numbers
        NumberFormat format1 = new DecimalFormat("#,###");

        // Format for non-integer decimal numbers
        NumberFormat format2 = new DecimalFormat("#,###.00");

        if ((int) number == number) {
            return format1.format(number);
        } else {
            return format2.format(number);
        }
    }
}

输出:

1,567

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...