使用方法
- 在「要四舍五入的数字」填入任意实数(示例 3.14159)。
- 在「保留位数」填入要保留的小数位数(示例 2,表示保留两位小数)。
- 点击「计算」或直接按回车,得到舍入后的结果。
- 下方「四舍五入对照表」列出常见数字与对应的舍入结果,前 12 行可见,可加载更多或导出。
这个四舍五入计算器能解决什么问题
四舍五入计算器解决的是「把一个带很多小数位的数字按指定精度截断」这个高频动作,常用于金额、占比、测量值和报表口径的统一。它能直接告诉你 Number.toFixed 在这种精度下的真实输出,而不是你脑子里以为的「四舍五入」。典型场景包括:把 3.14159 收成两位小数的 3.14、把单价保留两位小数对账、把百分比保留一位小数、以及排查「为什么 1.005 保留两位小数变成 1.00」这类前端坑。本页只做数值舍入,不做四舍五入相关的统计分组(可用百分位计算器单独处理)。
计算原理与变量说明
本页核心只有一句:结果 = Number(x.toFixed(d))。先调用 x.toFixed(d) 得到舍入后的字符串,再用 Number() 转回数字。
- 调用函数:
Number(x.toFixed(d));toFixed属于Number.prototype,返回字符串,再转数字方便后续计算。 - 参数取值:
d是「保留小数位数」而非有效数字;本页把上限设为 20,因为 toFixed 规范允许 0~100,但日常 2~4 位已足够,过大位数没有意义。 - 遵循标准:底层是 IEEE 754 双精度浮点;
toFixed的舍入规则由 ECMAScript 规范定义为「四舍五入到最近、中点取偶」,但受二进制存储误差干扰。 - 中间转换:
toFixed内部按字符串缩放(相当于把 x 乘 10^d、舍入、再除以 10^d)后格式化为定长字符串;Number()把 "3.14" 还原成数字 3.14。 - 边界阈值:
d必须是 0~100 的整数,超出抛RangeError;本页限制 0~20;当 |x| 超过 2^53(9007199254740991)时整数精度已丢失,结果不可信。 - 误用解释:
(2.675).toFixed(2)得到 "2.67" 而不是 2.68——因为 2.675 在内存里实际是 2.6749999…,舍入自然向下;这不是程序故障,是浮点精度使然。
完整示例(数值仅作演示)
示例:3.14159 保留 2 位小数。调 (3.14159).toFixed(2) 得字符串 "3.14",再 Number("3.14") 得数字 3.14。该数字与控件默认值、对照表第 1 行逐位一致。
浮点陷阱示例:1.005 保留 2 位,直觉应为 1.01,但真实结果是 "1.00"——原因同上,1.005 无法用二进制精确表示,存储值略小于 1.005,舍入后落在 1.00。需要精确十进制舍入时,应改用整数缩放或专门的十进制库。
输入范围与对照表
下表列出常见数字在指定保留位数下的真实输出(来自浏览器原生 toFixed)。带「浮点陷阱」的行说明:显示值偏离直觉,是因为二进制存储误差,而非计算错误。
| 原数 | 保留位数 | 四舍五入结果 | 说明 |
|---|---|---|---|
| 3.14159 | 2 | 3.14 | 正常 |
| 9.87654 | 2 | 9.88 | 正常 |
| 2.345 | 2 | 2.35 | 0.5 恰为中点向上取整 |
| -2.345 | 2 | -2.35 | 负数同样向上取整 |
| 1234.5678 | 0 | 1235 | 取整数 |
| 1234.5678 | 1 | 1234.6 | 保留 1 位 |
| 0.5 | 0 | 1 | 0.5 向上取整为 1 |
| 2.5 | 0 | 3 | 2.5 向上取整为 3 |
| 1.005 | 2 | 1.00 | 浮点陷阱:真实值略小于 1.005 |
| 0.615 | 2 | 0.61 | 浮点陷阱:真实值略小于 0.615 |
| 99.999 | 1 | 100.0 | 进位到整数 |
| 2.675 | 2 | 2.67 | 浮点陷阱:真实值略小于 2.675 |
| 8.575 | 2 | 8.57 | 浮点陷阱:真实值略小于 8.575 |
| 0.125 | 2 | 0.13 | 0.125 二进制可精确表示,正常向上 |
结果边界与舍入说明
- 保留位数必须是 0~20 的整数;填小数、负数或留空会在结果区上方给出具体提示,不会静默归零。
- 负数保留符号,绝对值按同样规则舍入,例如 -2.345 → -2.35。
- 当 |x| 超过 2^53(9007199254740991)时,整数在 JavaScript 中已丢精度,舍入结果不可信,应先转成字符串再做十进制处理。
toFixed的位数参数超过 100 会在浏览器中抛RangeError,本页把上限设为 20 规避该风险。- 出现「浮点陷阱」行时,显示值偏离直觉是因为二进制存储误差,不是计算错误;需要精确十进制请用整数缩放或专用库。
常见问题
toFixed 是四舍五入还是银行家舍入?
规范写的是「四舍五入到最近、中点取偶」,但实际受二进制存储误差影响,经常出现看起来不像四舍五入的结果,例如 2.675.toFixed(2) 得 "2.67" 而非 2.68。
为什么 1.005 保留两位小数得到 1.00 而不是 1.01?
1.005 无法用二进制双精度精确表示,内存里实际是 1.0049999…,toFixed 按这个略小的值舍入,得到 "1.00"。需要精确十进制舍入请改用整数缩放或专用库。
保留位数能填小数吗?
不能。toFixed 的位数必须是整数;填 2.5 会被取整或报错,本页会提示请填整数。
负数怎么处理?
符号保留,绝对值按同样规则舍入,例如 -2.345 保留两位得 -2.35。
超过多少位会出错?
toFixed 的位数超过 100 会抛 RangeError,本页把上限设为 20;日常 2~4 位已足够。
很大的整数会准吗?
超过 2^53(9007199254740991)的整数在 JavaScript 中已丢精度,舍入结果不可信,应先转成字符串处理。
这个工具免费吗?
免费、本地计算、不限制次数,无需注册即可使用。
我的数据会上传吗?
不会。全部计算在当前浏览器本地完成,不发起任何网络请求,可在开发者工具 Network 面板自查。