上一篇
Java如何表示科学计数法?
- 后端开发
- 2025-06-08
- 3796
在Java中科学计数法使用字母e或E表示,例如1.23e4表示12300,通过double或float类型变量声明时,可直接写为double d = 1.23E-4;(表示0.000123)。
在Java中,科学计数法通过字母E
或e
(不区分大小写)表示指数部分,其基本格式为:<基数> E <指数>
其中基数
可以是整数或浮点数,指数
必须是整数(可带正负号),科学计数法仅适用于float
和double
浮点类型,用于简化极大或极小数值的表示。
核心语法规则
符号 | 作用 | 示例 | 等价数值 |
---|---|---|---|
E |
表示“乘以10的幂” | 5E3 |
5 × 10³ = 5000 |
e |
与E 功能相同(不区分大小写) |
2e-4 |
00012 |
指数正号(可省略) | 3E+2 |
300 | |
指数负号(表示小数) | 5e-3 |
0075 |
具体使用示例
直接赋值给浮点变量
double d1 = 3.14e5; // 314000.0 (3.14 × 10⁵) float f1 = 2E-3F; // 0.002 (必须加 'F' 后缀表示float) double d2 = -6.02e23; // -602000000000000000000000.0 (阿伏伽德罗常数)
数学运算中使用
double result = 1.5e2 * 4e-1; // 150 * 0.4 = 60.0 System.out.println(2e3 / 1e2); // 输出 20.0 (2000 / 100)
结合输出语句
System.out.println(9.9e-5); // 输出 9.9E-4(自动格式化为科学计数法) System.out.printf("%.3f", 5E4); // 格式化输出: 50000.000
注意事项
-
整数类型不支持科学计数法
以下代码会导致编译错误:int num = 2E3; // 错误!不能赋值给 int/long
-
精度问题
科学计数法本质是浮点数计算,需警惕精度丢失:double a = 1.23456789e9; // 1234567890.0(整数部分精度正常) double b = 1.23456789e20; // 1.23456789E20(可能丢失小数精度)
-
指数范围限制
double
指数范围:-1022
~+1023
float
指数范围:-126
~+127
超出范围会得到Infinity
或0
:System.out.println(1e309); // 输出 Infinity (超出double上限) System.out.println(1e-324); // 输出 0.0 (超出double下限)
常见误区解析
- 错误示例:
10 e 3
正确写法:10e3
(e
前后不能有空格)。 - 错误示例:
E5
正确写法:1E5
(基数不能省略)。 - 错误类型转换:
float f = 1.2e3; // 错误!1.2e3默认是double,需强制转型或加 'F' 后缀 float fCorrect = 1.2e3F; // 正确
与字符串的转换
-
字符串 → 科学计数法数值
使用Double.parseDouble()
或Float.parseFloat()
:double num = Double.parseDouble("6.022E23"); // 解析为 6.022e23
-
数值 → 科学计数法字符串
用String.format()
或printf()
格式化:String s1 = String.format("%.4e", 12345.678); // "1.2346e+04" String s2 = String.format("%10.2E", 0.00007); // " 7.00E-05"(宽度10)
实际应用场景
- 科学计算
double lightSpeed = 2.99792458e8; // 光速 (m/s) double planck = 6.62607015e-34; // 普朗克常数 (J·s)
- 金融大额计算
double nationalDebt = 3.1e13; // 31万亿美元国债
- 微小量处理
double virusSize = 1e-7; // 干扰尺寸 (0.0000001米)
引用说明: 参考 Oracle 官方 Java 规范(Primitive Data Types),并结合 Java SE 17 版本实践验证,浮点数精度规则遵循 IEEE 754 标准。