用逗号作为小数分隔符解析双精度
Posted
技术标签:
【中文标题】用逗号作为小数分隔符解析双精度【英文标题】:Parsing double with comma as decimal separator 【发布时间】:2014-03-17 10:13:27 【问题描述】:我从用户那里获取输入并逐行读取。然后我使用拆分方法对输入进行标记。像这样:
Scanner input=new Scanner(System.in);
String input1=input.nextLine();
String[] tokens=input1.split(" ");
method1(Double.parseDouble(tokens[0]),Double.parseDouble(tokens[1]));
这里是method1
:
public static void method1 (double a, double b)
System.out.println(a);
System.out.println(b);
当我声明 3.5 和 5.3 输出时;
3.5
5.3
这里没有问题,但如果我声明 3,5 和 5,3 我的代码在下面给出错误;
Exception in thread "main" java.lang.NumberFormatException: For input string: "3,5"
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
我该如何解决这个问题?
【问题讨论】:
当您尝试将42,42
解析为 double 时,您认为会发生什么?
3,5 怎么是双倍?显然它会抛出NumberFormatException
。
致投反对票的人:42,7
,在某些文化中,逗号是被广泛接受的数字。
【参考方案1】:
使用NumberFormat
,您可以执行以下操作:
NumberFormat f = NumberFormat.getInstance(Locale.FRANCE);
double myNumber = f.parse("3,5").doubleValue();
现在您可以将myNumber
传递给接受double
值的方法。
当使用Locale.FRANCE
时,您告诉Java 您使用,
而不是.
编写double
数字。
【讨论】:
现在 OP 需要发布另一个问题,因为它不能解析3.5
:)
您应该建议将,
替换为.
:)
我也不能使用期望
@Abraam 避免异常表明不愿意使用 Java 标准实践。如果您不希望传播异常,请捕获并处理它。
@hexafraction 这不是我愿意或不愿意。我说我不能用!三思而后行【参考方案2】:
你可以像这样使用DecimalFormat
:
DecimanFormat df = new DecimalFormat("#.#", DecimalFormatSymbols.getInstance());
Double returnValue = Double.valueOf(df.format(input1));
所以DecimalFormatSymbols.getInstance()
将获得默认语言环境及其正确符号。
阅读更多关于DecimalFormat
的信息。
【讨论】:
【参考方案3】:我猜是: 您通过扫描仪输入的是
3.5 5.3
你已经申请了
String[] tokens=input1.split(" ");
所以它已将您的字符串划分为子字符串,即 3.5 和 5.3 如果您将输入作为
3.5,5.3
这将是成功的,它会编译没有错误..
你的情况
input 3,5 5,3
您只需要在拆分方法中添加一个“,”,例如:
String[] tokens=input1.split(",");
它将与输出一起工作......
3
5 5
3
【讨论】:
以上是关于用逗号作为小数分隔符解析双精度的主要内容,如果未能解决你的问题,请参考以下文章