Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有特定格式和两个小数的双精度_Java_Decimal - Fatal编程技术网

Java 具有特定格式和两个小数的双精度

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欧元 我有小数点后两位

我正试图将数字格式化成某种形式

因此,我喜欢数字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 = 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)不编译。虽然我们可以猜出你的意思,但最好是将真实的代码复制/粘贴到你的问题中。第一个选项非常有效!谢谢你,所以缪克:)它的工作非常好的第一个选择!谢谢你,苏穆克:)