Java中的计算器程序不能处理小数



我尝试编译我的第一个计算器,结果很好,除非我输入像14.6这样的十进制数字,否则它会给我一个错误。此错误仅在使用"。"时发生。(点符号)而不是当我使用","时。为什么呢?

代码如下:

import java.util.Scanner;
public class calc {
    public static void main (String args[]){
        Scanner fab = new Scanner (System.in);
        double fnum, snum, sum;
        System.out.println("Enter first number: ");
        fnum = fab.nextDouble();
        System.out.println("Enter second number: ");
        snum = fab.nextDouble();
        sum = fnum + snum;
        System.out.println (sum);         
   }
}

这是错误,如果你需要它:

Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextDouble(Unknown Source)
    at calculator.calc.main(calc.java:9)

试试这个

DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(Locale.getDefault());
System.out.println(dfs.getDecimalSeparator());

你会看到它打印出来

,

以上是Scanner类选择小数分隔符的操作。看起来您的Locale使用,作为小数分隔符。

在创建Scanner对象之前,可以使用

Locale.setDefault(Locale.Category.FORMAT, newLocale);

设置不同的默认Locale, .作为十进制分隔符。

或者,您可以使用Scanner#useLocale(newLocale)为您的Scanner对象设置不同的Locale

您可以将用户的输入读取为String,然后使用简单的if语句进行检查。给定的值是否包含不需要的字符。如果存在,则使用String.replace(oldChar, newChar)方法替换它。

import java.util.Scanner;
public class Demo {
    public static void main(String argsp[]) {
        Scanner scanner = new Scanner(System.in);
        String[] lines = new String[2];
        System.out.println("Enter first number:");
        lines[0] = scanner.nextLine();
        System.out.println("Enter second number:");
        lines[1] = scanner.nextLine();
        scanner.close();
        double[] numbers = new double[2]; 
        for (int i = 0; i < 2; i++) {
            if (lines[i].contains(",")) {
                lines[i] = lines[i].replace(",", ".");
                numbers[i] = Double.parseDouble(lines[i]);
            } else {
                numbers[i] = Double.parseDouble(lines[i]);
            }
        }
        System.out.println(numbers[0] + numbers[1]);
    }
}

最新更新