java中科学计数法既可用于字面量定义,也可用于格式化输出:前者是编译期数值表示,后者是运行时字符串呈现;字面量语法为系数e指数或系数e指数,系数需满足1≤|系数|

科学计数法字面量(定义变量时直接写)
Java 支持用 E 或 e 表示 10 的幂次,语法为:系数E指数 或 系数e指数,其中系数需满足 1 ≤ |系数| (实际书写不限于此,JVM 会自动归一化)。
-
double big = 1.23E5;→ 等价于123000.0 -
double small = 6.02e-23;→ 等价于0.0000000000000000000000602 -
float f = 3.14f;和float fs = 3.14E2f;都合法,f后缀不可省略 - 支持下划线增强可读性:
double avogadro = 6.022_140_76e23;
用 String.format() 输出科学计数法字符串
这是最常用、最可控的输出方式,核心是使用 %e 或 %E 转换符:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
%.3e→ 保留 3 位有效数字(不是小数位),如String.format("%.3e", 1234.5)得"1.235e+03" -
%.2E→ 大写 E,如"1.24E+03" - 指数部分默认三位、带符号(
e+03),无法直接去掉前导零或正号;若需精简(如e3),需额外字符串处理 - 负数自动保留负号:
String.format("%.2e", -0.00789)→"-7.89e-03"
特殊值与边界情况
科学计数法格式对 Java 浮点特殊值有明确定义:
-
0.0→ 输出类似"0.000000e+00"(按精度补零) -
Double.NaN→ 直接输出"NaN",不转科学计数法 -
Double.POSITIVE_INFINITY→ 输出"Infinity" - 极小值(如
1e-100)和极大值(如1e+300)均正常输出,不会溢出成Infinity(除非超出 double 范围)
注意精度本质问题
double 是二进制浮点数,不能精确表示多数十进制小数。格式化显示的是其实际存储值,不是原始字面量:
-
String.format("%.1e", 0.1 + 0.2)输出"3.0e-01",因为0.1 + 0.2实际是0.30000000000000004 - 若需严格按十进制逻辑控制(如金融计算),应改用
BigDecimal,再配合自定义科学计数法逻辑或toString()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










