使用方法
- 「数值」框填任意一个十进制数,示例 0.00045。它接受整数、小数,也接受 6.022e23 这种本身就带 e 的写法;光标停在框里按回车即换算,不必去点按钮。
- 「保留有效数字位数」决定结果尾数保留几位,示例 4 位,可切 3、4、5、6,切换后立即重算。
- 结果区先给出科学记数法与 E 记法,下方卡片再补上工程记数法,以及按所选位数舍入后的写法。
- 不改数据也能看到示例:0.00045 在打开页面时就已经算出 4.5 × 10⁻⁴ 与 4.5e-4,下方对照表默认展开前六行。
- 点「加载更多」展开其余六行,「复制对照表」取制表符文本,「导出 CSV」下载带字节序标记的文件,表格软件打开不乱码。
- 输入 0 不会报错,页面会说明 0 无法写成科学记数法、结果仍为 0,其余情况才会给出具体提示。
这个科学记数法计算器能解决什么问题
这个科学记数法计算器(原站内名『科学计数法记数法计算器』,是机器翻译把「计数法」与「记数法」两个同义词叠在一起的结果)解决的是「把同一个数在几种标准书写形式之间来回切换」。科研报告、工程图纸、程序日志与数据导出对同一串数字的写法要求并不一致:论文正文习惯写成 4.5 × 10⁻⁴,程序日志与 JSON 里用 4.5e-4,而电子标注电容、电感这类元件时又常用 450 × 10⁻⁶ 这种指数锁在 3 的倍数的工程记数法。
同一分类下的几个兄弟页分工不同:百分比计算器处理百分数与小数之间的换算,平均值计算器与中位数计算器做统计汇总,圆面积计算器与周长计算器做几何量计算。它们改变的是数值大小,本页改变的是同一个数的书写形式。
这类换算最容易出错的地方不是换算本身,而是几位有效数字、负号与指数符号三者混在一起时的可读性。把 4.5 × 10⁻⁴ 手抄成 4.5 × 104 或 4.5 × 10-4,在正式文稿里都算错。
计算原理与变量说明
设输入数值为 x,本页先把 x 拆成「尾数 a」与「指数 n」两个部分,规则固定为:
- 科学记数法:
n = floor(log10|x|),a = x ÷ 10ⁿ,要求尾数满足1 ≤ |a| < 10。示例 x = 0.00045 时,log10(0.00045) 约等于 −3.347,向下取整得 n = −4,于是 a = 0.00045 ÷ 10⁻⁴ = 4.5,写成 4.5 × 10⁻⁴。 - E 记法:把 a × 10ⁿ 写成
a e n的形式,示例 4.5e-4,负指数直接跟在 e 的后面,正指数才需要写加号。 - 工程记数法:指数锁到 3 的整数倍,
n = floor(floor(log10|x|) ÷ 3) × 3。示例 0.00045 的指数由 −4 拉到 −6,尾数随之变成 450,写成 450 × 10⁻⁶。 - 有效数字位数:结果按所选位数对尾数四舍五入,示例 4 位。它只改变尾数的显示精度,不会改变指数的大小。
- 零:
x = 0时没有对数可用,直接返回 0 并给出提示,不进入上面的流程。
三段公式原样写下来就是 n = floor(log10|x|)、a = x ÷ 10ⁿ、工程指数 = floor(floor(log10|x|) ÷ 3) × 3。反向也成立:给定尾数与指数,用 x = a × 10ⁿ 就能还原原数。
一、归一化区间被写死成 1 ≤ |a| < 10,所以同一个数只有一种标准写法。 这一点与「保留几位小数」不同:1404 可以写成 1404.0,也可以写成 1.4 × 10³ 或 14.04 × 10²,但只有 1.404 × 10³ 的尾数落在闭开区间里,因此它是唯一的标准形式。判断尾数是否越界只看两件事:绝对值是否不小于 1、是否小于 10。1404 的尾数 1.404 满足条件,14.04 与 0.1404 都不满足,前者偏大、后者偏小。
二、工程记数法把指数锁到 3 的倍数,目的是对齐 k、M、G。 10³ 是千(kilo)、10⁶ 是兆(mega)、10⁹ 是吉(giga),把指数取成 3 的整数倍之后,尾数就直接落在 1 到 1000 之间,做单位换算时换掉前缀即可,不必再心算指数偏移。1404 在工程记数法里仍是 1.404 × 10³,因为它的十进制指数正好是 3 的倍数;而 12345678 会变成 12.345678 × 10⁶,尾数跨过了 10。这也是看工程记数法时不能套用「尾数必须小于 10」的原因。
三、前导零不算有效数字,所以 0.004500 是 3 位而不是 7 位。 有效数字从第一个非零数字开始数起,小数点前面那串 0 只是占位符。整数末尾的零若无小数点,通常也不计入有效位:9800000000 只有 9 与 8 两位有效数字;一旦改写成 9.80 × 10⁹,末尾的零因为带了小数点就转为有效位,变成 3 位。这也是「整数不要随手补零」的由来,随手补零会改变别人对测量精度的判断。
四、科学记数法只是书写形式,不改变浮点的精度上限。 计算机里 0.1 加 0.2 不等于 0.3,根源是二进制无法精确表示多数十进制小数;把 0.1 写成 1e-1 并不会让它变精确,只是换了一种写法。按所选位数舍入得到的 1.2346 × 10⁷ 同样不是二进制里真正存储的值,它只是对真实值的一次显示近似,把舍入后的数再拿去运算会把误差一起带进去。
完整示例(数值仅作演示)
示例条件:数值 0.00045,保留 4 位有效数字,结果由本页算法复算得到。
- 科学记数法:log10(0.00045) 约等于 −3.347,向下取整得 n = −4,尾数 a = 4.5,得 4.5 × 10⁻⁴。
- E 记法:4.5e-4,负指数跟在 e 后。
- 工程记数法:指数由 −4 拉到 −6,得 450 × 10⁻⁶,尾数大于 10。
- 换一个整数:1404 的 n = 3、a = 1.404,得 1.404 × 10³ 与 1.404e3,工程记数法与它一致。
- 换一个七位数:12345678 得 1.234568 × 10⁷,工程记数法为 12.345678 × 10⁶。
- 换一个负小数:−0.000075 得 −7.5 × 10⁻⁵,工程记数法为 −75 × 10⁻⁶,负号落在尾数上。
- 零:输入 0 时页面给出「0 无法写成科学记数法,结果仍为 0」的提示,而不是把它当作错误。
把同样的数值填进工具区即可得到相同结果,示例数值均为演示,不代表任何实测数据。
原数与科学记数法、E 记法、工程记数法对照表
下表十二行是同一批数值在三种记数法下的对照,第一行 0.00045 就是本页的默认示例,所有取值都取自同一套换算规则。
| 原数 | 科学记数法 | E 记法 | 工程记数法 |
|---|---|---|---|
| 0.00045 | 4.5 × 10⁻⁴ | 4.5e-4 | 450 × 10⁻⁶ |
| 1404 | 1.404 × 10³ | 1.404e3 | 1.404 × 10³ |
| 12345678 | 1.234568 × 10⁷ | 1.234568e7 | 12.345678 × 10⁶ |
| 0.00000092 | 9.2 × 10⁻⁷ | 9.2e-7 | 920 × 10⁻⁹ |
| -78400 | -7.84 × 10⁴ | -7.84e4 | -78.4 × 10³ |
| 6.022e23 | 6.022 × 10²³ | 6.022e23 | 602.2 × 10²¹ |
| 9800000000 | 9.8 × 10⁹ | 9.8e9 | 9.8 × 10⁹ |
| 0.000001 | 1 × 10⁻⁶ | 1e-6 | 1 × 10⁻⁶ |
| 31536000 | 3.1536 × 10⁷ | 3.1536e7 | 31.536 × 10⁶ |
| 0.5 | 5 × 10⁻¹ | 5e-1 | 500 × 10⁻³ |
| -0.000075 | -7.5 × 10⁻⁵ | -7.5e-5 | -75 × 10⁻⁶ |
| 270000 | 2.7 × 10⁵ | 2.7e5 | 270 × 10³ |
读表要抓两点。一是同一行的三种写法数值完全相等,只是指数口径不同,1404 在三列里分别是 1.404 × 10³、1.404e3、1.404 × 10³,因为它的指数正好是 3 的倍数,科学记数法与工程记数法重合。二是负数的负号只作用在尾数上,−78400 的三列都带负号,指数本身不随正负改变。
下表把「有效数字位数」单独列出来。它看的是数字里真正有意义的部分,而不是字符长度,前导零与无小数点的末尾零都不计入。
| 数值 | 有效数字位数 | 说明 |
|---|---|---|
| 0.004500 | 3 | 前导零占位不计 |
| 1404 | 4 | 四位都有效 |
| 1.20e3 | 3 | 末尾零带小数点算有效 |
| 0.00045 | 2 | 只有 4 与 5 有效 |
| 6.022e23 | 4 | 尾数四位全有效 |
| 9800000000 | 2 | 整数末尾零不计 |
下表把每个数保留 4 位小数,也就是尾数写成 X.XXXX 这种共 5 位有效数字的形态,用来演示舍入之后尾数与指数如何配合。舍入只动尾数,指数保持不变。
| 原数 | 舍入到 4 位小数 |
|---|---|
| 12345678 | 1.2346 × 10⁷ |
| 0.00012345678 | 1.2346 × 10⁻⁴ |
| 987654.321 | 9.8765 × 10⁵ |
| -314159265 | -3.1416 × 10⁸ |
舍入到 4 位小数时,12345678 变成 1.2346 × 10⁷,0.00012345678 变成 1.2346 × 10⁻⁴,987654.321 变成 9.8765 × 10⁵,−314159265 变成 −3.1416 × 10⁸。
结果边界、舍入与适用说明
- 数值接受 −1e15 到 1e15 之间的任意十进制数;输入为空或不是数字时,结果区给出「请输入一个数值」的提示,不会静默归零。
- 绝对值达到 1e16 时页面提示「数值过大,请确认是否多打了一位」,避免把 1e15 与 1e16 这两个量级混为一谈。
- 输入 0 不报错,页面说明 0 无法写成科学记数法、结果仍为 0;0 没有对数,强行代入公式只会得到无意义的值。
- 尾数默认四舍五入到所选位数;显示精度受浮点能稳定表示的范围限制,末位偶尔会有 1 的出入。
- 工程记数法的指数一定是 3 的倍数,尾数可能大于等于 10,这是它与科学记数法外观上最大的差异,不算错误。
- E 记法没有上标,指数直接写成 e 后跟数字;正指数可以省略加号,负指数保留减号,与多数编程语言的浮点字面量一致。
- 本页按十进制理解输入,0x 十六进制、0b 二进制这类前缀不会被解析,请先换算成十进制。
- 结果只用于书写与核对,不改变数值本身;把舍入后的结果再代入运算会引入误差,需要高精度时请以原始值为准。
常见问题
为什么 0.00045 的指数是 −4 而不是 −3?
指数由 log10|x| 向下取整得到。log10(0.00045) 约等于 −3.347,向下取整是 −4 而不是 −3。取 −4 之后尾数 0.00045 ÷ 10⁻⁴ 等于 4.5,正好落在 1 到 10 之间;若取 −3,尾数会变成 0.45,小于 1,不满足归一化要求。
工程记数法为什么会冒出 450 这种大于 10 的尾数?
工程记数法把指数钉在 3 的倍数上,尾数因此允许落在 1 到 1000 之间。0.00045 的指数被从 −4 拉到 −6,尾数就必须变成 450 才能保持数值不变。它对齐的是 k、M、G 这些按千进位的工程前缀,而不是像科学记数法那样只要求尾数小于 10。
0.004500 为什么只算 3 位有效数字?
有效数字从第一个非零数字开始数,小数点前的 0 只是占位。判定时先去掉前导零,再看末尾的零是否带小数点;不带小数点的整数末尾零通常不计,所以 9800000000 只有 2 位有效数字。前导零一律不计,是这一栏最容易记错的地方。
数很大时 E 记法与科学记数法有什么区别?
两者的尾数与指数完全一样,只是排版不同。科学记数法把指数写成 10 的上标,便于纸面阅读;E 记法写成 a 后接 e 再接指数,是纯文本,能被程序直接解析,例如日志里的 1.234568e7。同一批数字在本页的两列里是等价的。
输入 0 为什么不直接算科学记数法?
因为 0 没有对数,log10(0) 未定义,归一化那一步无从下手。约定俗成的处理是把 0 单独拿出来,本页给出「0 无法写成科学记数法,结果仍为 0」的提示,而不是报错或凭空给出一个指数。
舍入到 4 位小数之后还能还原原数吗?
不能完整还原。12345678 舍入成 1.2346 × 10⁷ 之后,末尾被丢掉的 5678 已经不在结果里,反算回来只是近似值。舍入适合阅读与报告,需要继续参与运算时应保留原始数值,否则误差会逐次累积。
这个工具免费吗?
免费,无需注册即可使用。
输入的数据安全吗?
安全。计算在当前浏览器本地完成,不会上传输入内容。