我试图将数字格式化为某种方式。
所以,我喜欢数字 1007,2 ,我希望它看起来像 1 007,20
这需要两个因素:
我有一个设置千种格式的代码:
Double total_value = Double.valueOf(1007,2);
String formatedValue = NumberFormat.getNumberInstance(Locale.CANADA_FRENCH).format(total_value);
输出是: 1 007,2€
我有两位小数的代码:
Double total_value = Double.valueOf(1007,2);
String formatedValue = String.format("%.2f", total_value);
问题是,对于同时使用这两种格式的方法,它们总是会出现问题,因为它们中的两个返回字符串,并且都需要在Double中接收格式化值。
如果我在String中收到一个,当我尝试将字符串解析为Double String value = Double.parseDouble(formatedValue);
或String value = Double.valueOf(formatedValue)
时,它们总是会出错。我已经尝试了 DecimalFormat ,但它也返回了一个字符串。
所以,我不知道如何将两种方法结合在一起工作!
如果您有任何想法请评论:)
答案 0 :(得分:3)
您不想将NumberFormat
和String.format()
合并。
您可以进一步配置NumberFormat
对象,告诉它使用两位小数:
NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.CANADA_FRENCH);
numberFormat.setMinimumFractionDigits(2);
assertThat(numberFormat.format(1007.2), is("1 007,20"));
(可能setMaximumFractionDigits()
等,视您的需要而定 - 请参阅Javadoc)
注意 - NumberFormat.format()
不是线程安全的。
或者,您可以使用String.format(locale, format, args)
:
assertThat(String.format(Locale.CANADA_FRENCH, "%,.2f", 1007.2), is("1 007,20"));
格式中的,
标志告诉格式化程序使用千位分隔符,并且语言环境告诉它分隔符是空格。
答案 1 :(得分:0)
设置千种格式后,您可以执行以下操作:
String[] splitter = formatedValue.split("\\,");
int decimalDigits = 0;
if (splitter.length > 1) {
formatedValue = splitter[1].length();
} else {
formatedValue += ",";
}
for (int i = 0; i < 2 - decimalDigits; i++) {
formatedValue += "0";
}
我没有测试过这个,它并不是真的很漂亮,但是我使用类似英语格式的东西。
为了确保您只有两位小数,您可能应该在开头围绕总值。