Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用十进制格式仅在整数中隐藏尾随零_Java_Kotlin_Double_Decimalformat - Fatal编程技术网

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

Java 如何使用十进制格式仅在整数中隐藏尾随零,java,kotlin,double,decimalformat,Java,Kotlin,Double,Decimalformat,我需要这样的格式编号: 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 这是我的密码: 爪哇: 科特林: fun Double.toPrice(): String

我需要这样的格式编号:

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
这是我的密码: 爪哇:

科特林:

fun Double.toPrice(): String =   DecimalFormat("#,###,###.##", DecimalFormatSymbols().apply {
                groupingSeparator = ' '
            }).format(this)
但对于输入23.20或23.2,我得到的结果是23.2。这对我来说是错误的。我需要23点20分。我应该使用哪种字符串模式来实现此结果?请帮帮我。

公共静态字符串toPrice(双倍数字){
如果(数字==(整数)数字){
返回整数.toString((int)number);
}否则{
返回字符串。格式(“%.2f”,数字);
}
}
编辑
以包含千位分隔符

公共静态字符串toPrice(双倍数字){
如果(数字==(整数)数字){
返回字符串。格式(“%,d”,(int)编号);
}否则{
返回字符串.format(“%,.2f”,数字);
}
}
公共静态字符串toPrice(双倍数字){
如果(数字==(整数)数字){
返回整数.toString((int)number);
}否则{
返回字符串。格式(“%.2f”,数字);
}
}
编辑
以包含千位分隔符

公共静态字符串toPrice(双倍数字){
如果(数字==(整数)数字){
返回字符串。格式(“%,d”,(int)编号);
}否则{
返回字符串.format(“%,.2f”,数字);
}
}
更新 如果您需要将
1345.999
格式化为
1346
(如您的评论中所述),您可以通过在原始答案中添加两个额外步骤来实现:

  • 使用模式设置数字格式,
    ,#########.00
    ,然后删除所有逗号,以便将其解析回双精度
  • 将转换后的字符串解析为
    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,234,567.20
    1,234,567.01
    1,234,567
    1,346
    
    1,234,567
    1,234,567.20
    1,234,567.01
    1,234,567
    
    输出:

    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,234,567.20
    1,234,567.01
    1,234,567
    1,346
    
    1,234,567
    1,234,567.20
    1,234,567.01
    1,234,567
    
    原始答案 您需要使用两种格式,如下所示:

    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);
            }
        }
    }
    
    输出:

    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,234,567.20
    1,234,567.01
    1,234,567
    1,346
    
    1,234,567
    1,234,567.20
    1,234,567.01
    1,234,567
    
    更新 如果您需要将
    1345.999
    格式化为
    1346
    (如您的评论中所述),您可以通过在原始答案中添加两个额外步骤来实现:

  • 使用模式设置数字格式,
    ,#########.00
    ,然后删除所有逗号,以便将其解析回双精度
  • 将转换后的字符串解析为
    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,234,567.20
    1,234,567.01
    1,234,567
    1,346
    
    1,234,567
    1,234,567.20
    1,234,567.01
    1,234,567
    
    输出:

    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,234,567.20
    1,234,567.01
    1,234,567
    1,346
    
    1,234,567
    1,234,567.20
    1,234,567.01
    1,234,567
    
    原始答案 您需要使用两种格式,如下所示:

    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);
            }
        }
    }
    
    输出:

    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,234,567.20
    1,234,567.01
    1,234,567
    1,346
    
    1,234,567
    1,234,567.20
    1,234,567.01
    1,234,567
    


    您使用的术语“模式”不正确。在编程中,设计模式是解决特定问题的非常具体的例子。你只需要在格式化方面得到一些帮助,尽管我认为你错了。将数字显示为21.00表示您知道该数字的精度高于仅显示为21的数字。@nomaker
    DecimalFormat
    类始终将其字符串模板称为“模式”;本例中的构造函数参数称为
    模式
    。  因此,这样称呼似乎完全合情合理。  (设计模式不是唯一的模式。)@ArvindKumarAvinash你说的不对。链接问题的(我的)答案为
    23.20
    的输入生成
    23.20
    ,并且满足所有其他示例。这与Cenfracee的答案非常相似。这个问题是重复的,只是特别提到了
    DecimalFormat
    。我认为,
    DecimalFormat
    不是正确的工具,也不是这里的工作,
    String.format()
    更简单。哦,问题又被重新提出了。这是重复的:。@ArvindKumarAvinash删除评论时很难回复。对于
    23.001
    ,上述帖子上的答案将产生所需的
    23
    。您使用的术语“模式”不正确。在编程中,设计模式是解决特定问题的非常具体的例子。你只需要在格式化方面得到一些帮助,尽管我认为你错了。将数字显示为21.00表示您知道该数字的精度高于仅显示为21的数字。@nomaker
    DecimalFormat
    类始终将其字符串模板称为“模式”;本例中的构造函数参数称为
    模式
    。  因此,这样称呼似乎完全合情合理。  (设计模式不是唯一的模式。)@ArvindKumarAvinash你说的不对。链接问题的(我的)答案为
    23.20
    的输入生成
    23.20
    ,并且满足所有其他示例。这与Cenfracee的答案非常相似。这个问题是重复的,只是特别提到了
    DecimalFormat
    。我认为,
    DecimalFormat
    不是正确的工具,也不是这里的工作,
    String.format()
    更简单。哦,问题又被重新提出了。这是重复的:。@ArvindKumarAvinash删除评论时很难回复。如果是
    23.001
    ,上述帖子上的答案将产生
    23
    ,这是必需的。谢谢你的回答,但我需要显示带有千个分隔符的价格检查编辑的答案谢谢你的回答,但是我需要显示带有千个分隔符的价格检查编辑后的应答格式默认情况下使用RoundingMode.HALF_偶数(根据我的需要),例如,当我的值为1345.999时,我得到结果1346.00(末尾两个零,不正确)@testovtest-
    1346.00
    使用
    RoundingMode.HALF_偶数
    是正确的结果。查看解释。如果您需要将
    1345.999
    格式化为
    1345.99
    ,请使用
    RoundingMode.FLOOR
    。对于输入1345.999,我需要输出1346(四舍五入,但结尾不带零)@testovtest-我发布了一个更新以满足此要求。如果有任何疑问/问题,请随时发表评论。非常感谢