You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何接收以点作为小数点的double类型输入?

解决Java Scanner接收点作为小数点的问题

这问题我之前帮好几个开发者踩过坑!核心原因其实是**Locale(区域设置)**在搞怪:Scanner默认会用当前JVM的系统Locale来解析数字,如果你的系统Locale是用逗号做小数点的(比如欧洲、南美不少地区的默认设置),那输入.的时候就会触发InputMismatchException。

给你几个靠谱的解决方案,按需选就行:

1. 给Scanner单独指定Locale(最推荐)

直接在创建Scanner时强制它使用以点为小数点的Locale(比如英语区域),不影响全局设置,针对性解决问题:

import java.util.Locale;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 指定Locale为美国英语,强制用点作为小数点分隔符
        Scanner in_num = new Scanner(System.in).useLocale(Locale.US);
        double num1 = in_num.nextDouble();
        System.out.println("解析后的数字:" + num1);
    }
}

Locale.ENGLISH或者Locale.UK也能达到同样效果,选哪个都可以。

2. 全局设置JVM默认Locale

如果你的整个程序都需要用点作为小数点,可以全局修改JVM的默认Locale:

import java.util.Locale;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 全局设置JVM默认Locale为英语区域
        Locale.setDefault(Locale.US);
        Scanner in_num = new Scanner(System.in);
        double num1 = in_num.nextDouble();
        System.out.println("解析后的数字:" + num1);
    }
}

注意:这个操作会影响程序中所有依赖Locale的功能(比如日期、货币格式化),如果只是为了解决Scanner的问题,优先选第一种方法。

3. 先读字符串再手动转换(应急方案)

如果不想碰Locale,也可以先把输入当作字符串读入,再用Double.parseDouble()转换——这个方法默认是按点分隔的规则解析的:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in_num = new Scanner(System.in);
        String numStr = in_num.next();
        try {
            double num1 = Double.parseDouble(numStr);
            System.out.println("解析后的数字:" + num1);
        } catch (NumberFormatException e) {
            System.out.println("输入格式有误,请输入正确的数字");
        }
    }
}

不过这个方法需要自己处理格式异常,不如前两种优雅,适合临时应急用。

内容的提问来源于stack exchange,提问作者Alessandro Petric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:09:14