Java 具有特定格式和两个小数的双精度
我正试图将数字格式化成某种形式 因此,我喜欢数字1007,2,我希望它看起来像1007,20 这需要两个因素:Java 具有特定格式和两个小数的双精度,java,decimal,Java,Decimal,我正试图将数字格式化成某种形式 因此,我喜欢数字1007,2,我希望它看起来像1007,20 这需要两个因素: 千格式 小数点后两位 我有一个设置数千格式的代码: Double total_value = Double.valueOf(1007,2); String formatedValue = NumberFormat.getNumberInstance(Locale.CANADA_FRENCH).format(total_value); 输出为: 1007,2欧元 我有小数点后两位
- 千格式
- 小数点后两位
Double total_value = Double.valueOf(1007,2);
String formatedValue = NumberFormat.getNumberInstance(Locale.CANADA_FRENCH).format(total_value);
输出为:
1007,2欧元
我有小数点后两位的代码:
Double total_value = Double.valueOf(1007,2);
String formatedValue = String.format("%.2f", total_value);
NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.CANADA_FRENCH);
numberFormat.setMinimumFractionDigits(2);
assertThat(numberFormat.format(1007.2), is("1 007,20"));
问题是,如果同时使用这两种格式方法,它们总是会遇到问题,因为它们都返回字符串,并且都需要接收双精度格式的值
如果我在字符串中收到一个,当我尝试将字符串解析为Double时,比如String value=Double.parseDouble(formattedvalue)
或String value=Double.valueOf(formattedvalue)
它们总是会出错。我已经尝试了十进制格式,但它也返回了一个字符串
所以,我不知道如何才能将这两种方法结合起来
如果您有任何想法,请发表评论:)您不想将
NumberFormat
和String.format()结合起来
您可以进一步配置NumberFormat
对象,使其使用两位小数:
Double total_value = Double.valueOf(1007,2);
String formatedValue = String.format("%.2f", total_value);
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(区域设置、格式、参数)
:
格式中的,
标志告诉格式化程序使用千位分隔符,区域设置告诉格式化程序分隔符是一个空格。您不想将NumberFormat
和String.format()
组合在一起
您可以进一步配置NumberFormat
对象,使其使用两位小数:
Double total_value = Double.valueOf(1007,2);
String formatedValue = String.format("%.2f", total_value);
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(区域设置、格式、args)
:
格式中的,
标志告诉格式化程序使用千位分隔符,区域设置告诉格式化程序分隔符是一个空格。设置千位格式后,可以执行以下操作:
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";
}
String[]splitter=formattedvalue.split(“\\,”);
整数小数位数=0;
如果(拆分器长度>1){
FormattedValue=拆分器[1]。长度();
}否则{
格式化值+=“,”;
}
对于(int i=0;i<2-小数位数;i++){
FormattedValue+=“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";
}
String[]splitter=formattedvalue.split(“\\,”);
整数小数位数=0;
如果(拆分器长度>1){
FormattedValue=拆分器[1]。长度();
}否则{
格式化值+=“,”;
}
对于(int i=0;i<2-小数位数;i++){
FormattedValue+=“0”;
}
我还没有测试过这个,它也不是很漂亮,但我正在使用类似的英语格式
为了确保只有两个十进制数字,您可能应该在开始时对总值进行四舍五入。您是否尝试过分别处理数字部分和十进制部分,然后将结果串联起来(删除十进制字符串的前两个字符)?注意,Double.valueOf(1007,2)代码>不编译。虽然我们可以猜出你的意思,但最好是将真实代码复制/粘贴到你的问题中。你是否尝试过分别处理数字部分和小数部分,然后将结果串联起来(删除小数字符串的前两个字符)?注意,Double.valueOf(1007,2)代码>不编译。虽然我们可以猜出你的意思,但最好是将真实的代码复制/粘贴到你的问题中。第一个选项非常有效!谢谢你,所以缪克:)它的工作非常好的第一个选择!谢谢你,苏穆克:)