String.Format()的DecimalSeparator问题

时间:2017-09-07 12:21:48

标签: java locale string-formatting decimalformat

请在下面找到我的代码:

double value = (double)-16325.62015;
System.out.println(String.format("%s", value));//-16325.62015
System.out.println(String.format(new Locale("de", "DE"), "%s", value));//-16325.62015
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(new Locale("de", "DE"));
System.out.println(dfs.getDecimalSeparator());//,

在上面的代码中,我得到了德语区域设置错误的小数点分隔符。

我也尝试了以下代码,但它产生了-16325,6

double value = (double)-16325.62015;
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(new Locale("de", "DE"));
DecimalFormat df = new DecimalFormat("#.#", dfs ); 
System.out.println(df.format(value));

有没有其他方法可以将输出打印为-16325,62015

注意:我想为任何特定区域设置打印带有n个小数位的double值

提前致谢

1 个答案:

答案 0 :(得分:0)

您必须使用%f而不是%s。使用%s时,Java使用String.valueOf将您的值转换为String,该double value = (double)-16325.62015; System.out.println(String.format("%f", value)); System.out.println(String.format(Locale.GERMANY, "%f", value)); 使用默认语言环境。

tasks:
  - debug:
      msg: "{{ envcandidates | reject('equalto', '') | first }}"
    vars:
      envcandidates: “{{ lookup('env', 'BUILD_USER_EMAIL', 'GERRIT_CHANGE_OWNER_EMAIL', 'GERRIT_EVENT_ACCOUNT_EMAIL', 'GERRIT_EVENT_ACCOUNT_EMAIL', wantlist=True) }}”