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的数字。@nomakerDecimalFormat
类始终将其字符串模板称为“模式”;本例中的构造函数参数称为模式
。 因此,这样称呼似乎完全合情合理。 (设计模式不是唯一的模式。)@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-我发布了一个更新以满足此要求。如果有任何疑问/问题,请随时发表评论。非常感谢