我已经阅读了很多讨论串,似乎最好的解决方案是保留双精度数字中的2位小数:
DecimalFormat df = new DecimalFormat("#.00");
double d = 1.234567;
System.out.println(df.format(d));
但是当我使用它时,它打印出:
1,23
我想保留小数点,因为我需要这种格式(#.##)来使用(我将把它作为字符串使用)。如何保留这个小数点?
我已经阅读了很多讨论串,似乎最好的解决方案是保留双精度数字中的2位小数:
DecimalFormat df = new DecimalFormat("#.00");
double d = 1.234567;
System.out.println(df.format(d));
但是当我使用它时,它打印出:
1,23
我想保留小数点,因为我需要这种格式(#.##)来使用(我将把它作为字符串使用)。如何保留这个小数点?
Locale
,例如:DecimalFormat df = new DecimalFormat("#.00",
DecimalFormatSymbols.getInstance(Locale.US));
基本上,格式模式中的“.”并不意味着“点”,而是表示“小数分隔符”。
试一下这个。在这种情况下,您不需要定义模式。
DecimalFormat format = (DecimalFormat) NumberFormat.getNumberInstance(Locale.FRENCH);
format.setMaximumFractionDigits(2);
System.out.println(format.format(1.234567));
请看这个程序。找出您的语言环境并使用特定于该语言环境的NumberFormat
。
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
public class LocaleNumberFormatDemo {
/**
* @param args
*/
public static void main(String[] args) {
double no = 123456.7890;
System.out.println(Locale.getAvailableLocales().length);
for (Locale locale : Locale.getAvailableLocales()) {
NumberFormat numberFormat = DecimalFormat.getNumberInstance(locale);
System.out.println("========================================");
System.out.println(locale.getDisplayCountry() + " - " + locale.toString());
System.out.println(numberFormat.format(no));
DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance(locale);
String numberPattern = decimalFormat.toLocalizedPattern();
System.out.println(numberPattern);
}
}
}
输出:
Malaysia - ms_MY
123,456.789
#,##0.###
========================================
Qatar - ar_QA
123,456.789
#,##0.###;#,##0.###-
========================================
Iceland - is_IS
123.456,789
#.##0,###
========================================
Finland - fi_FI
123 456,789
# ##0,###
and so on...