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

質問の重要な部分は、Float.toString()関連する小数点以下の桁数を自動的に計算し、それをかなりうまく処理することだと思います。私のJREでは、クラスsun.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 

floatの場合、最初に、精度を変更せずにfloatからBigDecimalに変換する方法を理解する必要があります。JavaでfloatからbigDecimalに変換する方法は?

于 2012-06-07T18:41:05.673 に答える
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()に適切な値を返す場合、3 番目の値で問題なく動作する可能性があります。Locale

別の方法はNumberFormat

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