0

The default Java Float.toString(float) method prints a floating point number with "only as many ... [fractional] digits as are needed to uniquely distinguish the argument value from adjacent values of type float." Perfect! Just what I need---except that I need to do this in a locale-specific way (e.g. on a French computer "1.23" would be represented as "1,23").

How do I reproduce the functionality of Float.toString(float) in a locale-aware manner?

4

2 回答 2

0

您可以尝试以下方法:

String s1 = String.format(Locale.FRANCE, "%.2f", 1.23f); // Country FRANCE 1,23
String s2 = String.format(Locale.FRENCH, "%.2f", 1.23f); // Language FRENCH 1,23
String s3 = String.format("%.2f", 1.23f); // Default Locale

.2是可选的,是小数位数

Locale.getDefault()如果返回适合Locale法国的情况,可能与第三个配合得很好。

另一种方法是使用NumberFormat

NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);
String s4 = nf.format(1.23f); // 1,23
于 2012-06-07T17:03:22.217 回答
0

我认为问题的重要部分是Float.toString()自动计算出相关的小数位数,并且做得很好。在我的 JRE 中,使用了 classsun.misc.FloatingDecimal类。该类中的逻辑看起来非常复杂且难以重现。

另一个可以用来猜测要显示的正确位数的类是BigDecimal. 例如,如果您正在使用double而不是float

double d = 1.23;
NumberFormat nf = NumberFormat.getNumberInstance(Locale.FRENCH); 
BigDecimal bd = BigDecimal.valueOf(d);
nf.setMaximumFractionDigits(bd.scale());
String s = nf.format(1.23f); // 1,23 

对于浮点数,您首先必须弄清楚如何在不改变精度的情况下从浮点数转换为 BigDecimal:How to convert from float to bigDecimal in java?

于 2012-06-07T18:41:05.673 回答