问题描述
我需要这样的格式编号:
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
(如您的注释中所述),则可以通过在原始答案中添加几个额外的步骤来实现:
- 使用
#,###,###.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,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