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

Java中如何按需输出double:整数去小数,非整数保留小数

解决Java中double数值智能显示(整数无.0,小数保留)的简便方法

嘿,这个需求其实挺常见的,不用折腾复杂正则也能轻松搞定,给你几个实用又简便的实现方式:

方法1:用NumberFormat自动处理格式

Java的NumberFormat类能智能识别整数和小数,自动调整显示格式,还支持本地化(比如不同地区的千位分隔符),非常省心:

import java.text.NumberFormat;
import java.util.Scanner;

public class NumberDisplay {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Give a number:");
        double value = Double.parseDouble(scanner.nextLine());
        
        // 获取默认格式实例
        NumberFormat numberFormatter = NumberFormat.getInstance();
        // 设置最多保留10位小数(按需调整,避免不必要的精度)
        numberFormatter.setMaximumFractionDigits(10);
        // 整数时不显示小数部分
        numberFormatter.setMinimumFractionDigits(0);
        
        System.out.println("You gave the number " + numberFormatter.format(value));
    }
}

特点:自动适配整数/小数显示,支持本地化,适合需要规范格式的场景。

方法2:直接判断是否为整数后转换

如果不需要本地化,直接判断double是否为整数,再选择转int还是保留原数值,逻辑直观:

import java.util.Scanner;

public class NumberDisplay {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Give a number:");
        double value = Double.parseDouble(scanner.nextLine());
        
        String displayText;
        // 判断是否为整数:值等于向下取整的值,且不是无穷大(避免特殊值干扰)
        if (value == Math.floor(value) && !Double.isInfinite(value)) {
            // 转成int后转字符串,去掉.0
            displayText = String.valueOf((int) value);
        } else {
            // 非整数直接转字符串
            displayText = String.valueOf(value);
        }
        
        System.out.println("You gave the number " + displayText);
    }
}

注意:这个方法对输入为精确整数的情况完全有效,比如输入"10"转成double后是10.0,判断成立;如果是类似10.0000000001的浮点数误差场景,可能需要额外处理,但一般用户输入的字符串转double不会有这个问题。

方法3:用String.format的%g格式符

%g格式符会自动去掉数值末尾的零和多余的小数点,还能避免不必要的科学计数法(调整精度参数即可):

import java.util.Scanner;

public class NumberDisplay {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Give a number:");
        double value = Double.parseDouble(scanner.nextLine());
        
        // %g会自动优化显示,去掉末尾的0和.0
        // 若要避免科学计数法,可指定精度如%.10g(保留最多10位有效数字)
        String displayText = String.format("%g", value);
        
        System.out.println("You gave the number " + displayText);
    }
}

特点:代码最简洁,一行格式化搞定,适合快速实现需求。

以上几种方法都比正则处理更直接,你可以根据自己的场景选择最合适的~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:47:32