当我用逗号或点分隔小数时扫描双精度数

Fos*_*osh 4 java double java.util.scanner

我对 Java 相当陌生,我正在制作一个简单的计算器。问题是,当我输入的数字是“3.1”时,它会给出异常错误,但当写入“3,1”时,它工作得很好。

\n\n

然而,我的朋友有一个稍微更高级的计算器(带有字符串解析),当我运行他的代码时,会发生相反的情况:3,1 给出异常错误,3.1 工作完美。

\n\n

我很想知道是什么导致了这些不同的行为。

\n\n

我刚才做了这个简单的求和,同样的情况发生了,我将在几分钟内编辑并输入他的计算器代码

\n\n
import java.util.Scanner;\n\npublic class Tutorial_7 {\n    public static void main(String args[]){\n        Scanner scan = new Scanner(System.in);\n        double num1, num2;\n\n        System.out.println("Introduza os dois n\xc3\xbameros");\n\n        System.out.println("1\xc2\xba: ");\n        num1 = scan.nextDouble();\n        System.out.println("2\xc2\xba: ");\n        num2 = scan.nextDouble();\n\n        System.out.println((num1 + num2));\n        scan.close();\n    }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

最终编辑:他确实使用Double.parseDouble(). 明白了,区别确实在于它的本地化位置。应该寻找它,但以前从未听说过这个概念。

\n\n

谢谢

\n

YCF*_*F_L 7

因为您使用的是差异Local,一个可以用点扫描它.,另一个用逗号,来修复它,所以您应该为您的扫描仪修复一个,如下所示:

Scanner scan = new Scanner(System.in).useLocale(Locale.US);
Run Code Online (Sandbox Code Playgroud)

例如:

  • 如果您正在使用,您应该用 类似的Local.US方式扫描您的替身.6.6
  • 如果您正在使用,您应该用类似的Locale.FRENCH方式扫描您的替身,6,6