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
相关产品推荐
相关产品推荐

