默认的Java Float.toString(float)
方法打印一个浮点数,其中“只需要尽可能多的...... [小数]”数字,以便唯一地将参数值与类型float
的相邻值区分开来。“完善!正是我需要的 - 除了我需要以特定于语言环境的方式执行此操作(例如,在法语计算机上“1.23”将表示为“1,23”)。
如何以区域设置感知的方式重现Float.toString(float)
的功能?
答案 0 :(得分: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
答案 1 :(得分: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转换为BigDecimal:How to convert from float to bigDecimal in java?