我如何使用String.format(format, args)格式化双精度函数,如下所示?
String.format(format, args)
2354548.235→2,354,548.23
2354548.235
2,354,548.23
从这个链接提取的代码;
Double amount = new Double(345987.246); NumberFormat numberFormatter; String amountOut; numberFormatter = NumberFormat.getNumberInstance(currentLocale); amountOut = numberFormatter.format(amount); System.out.println(amountOut + " " + currentLocale.toString());
这个例子的输出显示了相同数字的格式如何随着Locale的不同而变化:
345 987,246 fr_FR 345.987,246 de_DE 345,987.246 en_US
String.format("%1$,.2f", myDouble);
String.format自动使用默认区域设置。
String.format
public class MainClass { public static void main(String args[]) { System.out.printf("%d %(d %+d %05d\n", 3, -3, 3, 3); System.out.printf("Default floating-point format: %f\n", 1234567.123); System.out.printf("Floating-point with commas: %,f\n", 1234567.123); System.out.printf("Negative floating-point default: %,f\n", -1234567.123); System.out.printf("Negative floating-point option: %,(f\n", -1234567.123); System.out.printf("Line-up positive and negative values:\n"); System.out.printf("% ,.2f\n% ,.2f\n", 1234567.123, -1234567.123); } }
然后打印出来:
3 (3) +3 00003 默认浮点格式:1234567,123000 带逗号的浮点数:1.234.567,123000 负浮点数默认值:-1.234.567,123000 负浮点选项:(1.234.567,123000) 排列正负值: 1.234.567 12 < br > 1.234.567 12 < / p >
3 (3) +3 00003 默认浮点格式:1234567,123000 带逗号的浮点数:1.234.567,123000 负浮点数默认值:-1.234.567,123000 负浮点选项:(1.234.567,123000)
排列正负值: 1.234.567 12 < br > 1.234.567 12 < / p >
如果你想用手动设置的符号格式化它,使用这个:
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols(); decimalFormatSymbols.setDecimalSeparator('.'); decimalFormatSymbols.setGroupingSeparator(','); DecimalFormat decimalFormat = new DecimalFormat("#,##0.00", decimalFormatSymbols); System.out.println(decimalFormat.format(1237516.2548)); //1,237,516.25
但是,基于区域设置的格式是首选的。
String.format("%4.3f" , x) ;
有很多方法可以做到这一点。这些因素如下:
使用NumberFormat和舍入模式
NumberFormat
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH); DecimalFormat decimalFormatter = (DecimalFormat) nf; decimalFormatter.applyPattern("#,###,###.##"); decimalFormatter.setRoundingMode(RoundingMode.CEILING); String fString = decimalFormatter.format(number); System.out.println(fString);
使用字符串格式化器
System.out.println(String.format("%1$,.2f", number));
请注意:
在舍入过程中,你可以在格式化器中添加RoundingMode。下面给出一些舍入模式:
RoundingMode
decimalFormat.setRoundingMode(RoundingMode.CEILING); decimalFormat.setRoundingMode(RoundingMode.FLOOR); decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN); decimalFormat.setRoundingMode(RoundingMode.HALF_UP); decimalFormat.setRoundingMode(RoundingMode.UP);
这里是导入:
import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.Locale;
使用DecimalFormat
DecimalFormat
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH); DecimalFormat decimalFormatter = (DecimalFormat) nf; decimalFormatter.applyPattern("#,###,###.##"); String fString = decimalFormatter.format(myDouble); System.out.println(fString);