gpt4 book ai didi

Java 十进制格式解析问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:55:01 25 4
gpt4 key购买 nike

public class NumFormatTest
{
public static void main(String[] args) throws ParseException
{
String num = "1 201";
DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(Locale.FRANCE);
System.out.println("Number Before parse: "+num);
double dm = df.parse(num).doubleValue();
System.out.println("Number After parse: "+dm);
}
}

输出:

 Number Before parse: 1 201

Number After parse: 1.0

预期输出:

  Number Before parse: 1 201

Number After parse: **1201**

能帮我理解为什么 parse 无法将 FRENCH 区域设置格式的字符串 (1 201) 转换为正常的 double 值 (1201.0) 吗?

最佳答案

有两种空间。 “正常”空格字符(第 32 号 - 十六进制 0x20)和不间断空格 (NBSP)(第 160 号 - 十六进制 0xA0)。

法语语言环境要求数字之间的空白字符是不间断空格!您可以使用这行代码帮助自己:

String num = "1 201";
num = num.replaceAll(" ", "\u00A0"); // '\u00A0' is the non breaking whitespace character!

这样您的代码将按预期工作。请注意,如果您将 double 格式化为具有法语语言环境的 String,则生成的空白字符也将是 NBSP!

DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(Locale.FRENCH);
System.out.println(df.format(1201.1));
// This will print "1 202,1" But the space character will be '\u00A0'!

关于Java 十进制格式解析问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34156585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com