截断数
截断将精度降低到零,并且不应用向上舍入或平局规则。
什么是截断?
截断是指删除数字中指定位置之后的位数,而不对剩余的数字进行舍入。对于小数而言,向零截断会删除不需要的小数位,同时使数字更接近零。
截断是如何工作的?
应用截断需要遵循一个简单、严格的规则:
从原始数字开始
例如,取数字 45.6789。
选择要保留的位置
决定要保留的小数位数(例如,2个小数位数)。
保留该位置及之前的数字
确定截止点及之前的数字(45.67)。
删除其后的所有数字
丢弃其余所有内容(89)。不要改变保留的数字,结果为 45.67。不发生舍入。
如何将数字截断为整数
截断为整数只是去除了值的整个小数部分,仅留下整数。
- 2.99 → 2
- 2.01 → 2
- −2.99 → −2
- −2.01 → −2
请注意,对于负数,截断去除了小数,这意味着结果移向零。这与数学中的向下取整函数有极大的不同。
−2.99 的截断 = −2
如何截断到小数位数
要将数字截断到特定的小数位数,您只需在小数点后保留该数量的位数,然后删除其余的。
12.9876 的示例:
- 1个小数位数:12.9876 → 12.9
- 2个小数位数:12.9876 → 12.98
- 3个小数位数:12.9876 → 12.987
- 4个小数位数:12.9876 → 12.9876
−12.9876 的示例(符号不变):
- 1个小数位数:−12.9876 → −12.9
- 2个小数位数:−12.9876 → −12.98
- 3个小数位数:−12.9876 → −12.987
截断如何处理负数?
向零截断会使负数严格向零移动。
由于负号保持不变,且小数部分直接被删除,结果值在技术上大于原始值(例如,−3 大于 −3.9)。
- −3.9 → −3
- −3.5 → −3
- −3.1 → −3
- −3.99 截断到1个小数位数 → −3.9
- −3.99 截断到2个小数位数 → −3.99
| 方法 | 输入:−3.9 | 结果 |
|---|---|---|
| 截断 | −3.9 | −3 |
| 向下取整 | −3.9 | −4 |
| 向上取整 | −3.9 | −3 |
这是一个关键区别:对于负值,截断的行为与向上取整函数相同,而对于正值,截断的行为与向下取整函数相同。
截断如何处理正数?
对于正数,直接删除小数位意味着数字向零移动(在数轴上向下)。
- 3.9 → 3
- 3.99 → 3
- 15.678 → 15.67
- 123.4567 → 123.45
当数字已经是整数时会发生什么?
如果数字已经是整数(即整数值),截断会让其完全保持不变,因为没有需要删除的小数位。
- 5 → 5
- 0 → 0
- −5 → −5
- 100 → 100
零的截断是什么?
截断零或零的任何变体都只得到零。
- 0 → 0
- 0.0 → 0
- −0.5 → 0 (向零截断为整数时)
截断分数
截断也可以在将分数求值为其小数形式后应用。
示例 1: 7 / 3 = 2.333...
截断到2个小数位数:2.33
示例 2: 11 / 4 = 2.75
截断到1个小数位数:2.7
示例 3: −7 / 3 = −2.333...
向零截断到2个小数位数:−2.33
截断示例
| 输入 | 目标 | 截断结果 | 解释 |
|---|---|---|---|
| 2.99 | 整数 | 2 | 删除小数部分 |
| −2.99 | 整数 | −2 | 向零移动 |
| 45.6789 | 2个小数位数 | 45.67 | 删除第二个小数位之后的数字 |
| 12.9876 | 1个小数位数 | 12.9 | 删除第一个小数位之后的数字 |
| −12.9876 | 2个小数位数 | −12.98 | 删除第二个小数位之后的数字 |
| 7.999 | 2个小数位数 | 7.99 | 不发生舍入 |
截断公式
向零截断到特定数量的小数位数(n)背后的数学概念包括缩放数字、丢弃小数部分,然后缩放回来。
这是通过以下方式实现的:
- 乘以 10ⁿ,将目标小数位移动到整数位置。
- 向零截断,丢弃剩余的小数部分。
- 除以 10ⁿ,恢复原来的小数位置。
正数示例
将 12.987 截断到2个小数位数:
- 12.987 × 100 = 1298.7
- trunc(1298.7) = 1298
- 1298 / 100 = 12.98
负数示例
将 −12.987 截断到2个小数位数:
- −12.987 × 100 = −1298.7
- trunc(−1298.7) = −1298
- −1298 / 100 = −12.98
截断函数
在数学上,对于实数 x,向零截断可以使用向下取整和向上取整函数分段定义:
trunc(x) = ceiling(x) 当 x < 0
或者,使用符号函数(sgn 或 sign)和绝对值(|x|):
这两个公式都在数学上对正负值实施了“向零移动”规则。
截断与舍入
截断和舍入是根本不同的操作。截断直接忽略丢弃的数字。舍入则根据丢弃的数字来决定是否应增加保留的数字。
示例 1: 2.987
- 截断到2个小数位数:2.98
- 舍入到2个小数位数:2.99
示例 2: 2.983
- 截断到2个小数位数:2.98
- 舍入到2个小数位数:2.98
示例 3: −2.987
- 向零截断:−2.98
- 舍入到最接近的百分位:−2.99
截断不意味着它是最接近值舍入的一种类型;它是一种独立的截断机制。
截断与向下取整函数
截断使值向零移动。向下取整函数使值向负无穷大移动。
对于正数,它们的行为完全相同。对于负数,它们朝着相反的方向移动。这使得负数上的差异极其明显。
| 输入 | 截断(向零) | 向下取整(向 −∞) |
|---|---|---|
| 2.7 | 2 | 2 |
| 2.1 | 2 | 2 |
| −2.1 | −2 | −3 |
| −2.7 | −2 | −3 |
| −5.9 | −5 | −6 |
截断与向上取整函数
截断向零移动。向上取整函数向正无穷大移动。
对于负值,截断和向上取整通常产生相同的整数结果,因为从负小数向正无穷大移动会指向零。对于正数,它们有所不同。
| 输入 | 截断 | 向上取整 |
|---|---|---|
| 2.7 | 2 | 3 |
| −2.7 | −2 | −2 |
| −2.1 | −2 | −2 |
截断与向下舍入相同吗?
不。向零截断和数学上的向下取整(通常非正式地称为“向下舍入”)对负数来说是不同的操作。
考虑值 −2.7:
- 截断 → −2
- 向下取整(向下舍入) → −3
因为“向下舍入”这个词可能是有歧义的,所以始终要明确您是指严格向负无穷大移动(向下取整),还是向零剔除数字(截断)。
截断与四舍五入
四舍五入考虑下一个数字以决定是否更改保留的值,将正好一半的情况推离零。
对于 2.65 截断到1个小数位数:
- 截断 → 2.6
- 四舍五入 → 2.7
对于 −2.65 截断到1个小数位数:
- 截断 → −2.6
- 四舍五入 → −2.7
截断与银行家舍入
银行家舍入是一种最接近值规则,对正好一半的情况有特殊处理。截断则只是删除数字,没有任何平局打破(tie-breaking)规则。
对于 2.65 截断到1个小数位数(正好是一半,保留偶数数字):
- 截断 → 2.6
- 银行家舍入 → 2.6
对于 2.75 截断到1个小数位数(正好是一半,保留奇数数字):
- 截断 → 2.7
- 银行家舍入 → 2.8
数轴上的截断
从视觉上看,截断总是将非整数值在数轴上向内(向零)拉近。
- 对于正值(2.8 → 2),它将值向左(向零)拉。
- 对于负值(−2.8 → −2),它将值向右(向零)拉。
相比之下,向下取整无论符号如何,总是向左移动(−2.8 → −3)。
什么时候应该使用截断?
截断非常具体,应该根据计算的需求来使用。您在以下情况应该使用截断:
- 显示固定数量的小数位数而不进行舍入。
- 完全消除额外的精度。
- 处理指定的截止线是刻意为之的测量数据。
- 执行某些编程和数据处理任务。
- 实现受控的数值显示,其中增加显示值是不受欢迎的。
截断并不总是更好或更差;与标准舍入相比,它只是满足了不同的分析需求。
截断在现实世界中的应用
更倾向于使用截断的具体示例包括:
- 金融显示: 某些特定的金融显示明确要求向下截断不足一分的部分,以防止显示虚增的余额,尽管实际算术通常需要特定的舍入规则。
- 测量数据和传感器值: 在存储前从传感器噪声中去除过高的精度以节省空间。
- 数字显示: 显示 99.9% 完成度的进度条通常会截断为 99%,以防止过早显示 100%。
- 数据报告: 统计学和数据预处理经常采用截断来安全地划分人口统计数据。
- 科学计算: 严格的协议要求固定截止值的环境。
编程中的截断
编程语言提供了专门用于截断数值的不同函数。
Python 中的截断
使用 math 模块中的 math.trunc() 函数将数字向零截断。不要将其与 math.floor() 混淆。
math.trunc(2.99) // Returns 2
math.trunc(-2.99) // Returns -2
JavaScript 中的截断
使用 Math.trunc() 函数可以轻松地将数字的小数部分向零去除。
Math.trunc(-2.99) // Returns -2
Java 中的截断
在 Java 中,将浮点数显式强制转换为整数即可执行数学截断。
(int) -2.99 // Returns -2
C# 中的截断
使用 Math.Truncate() 向零去除小数部分。
Math.Truncate(-2.99) // Returns -2
Excel 中的截断
使用 TRUNC(number, num_digits) 函数。默认情况下,它会截断为整数,但您可以轻松指定小数位数。
TRUNC(-2.987, 2) // Returns -2.98
TRUNC(2.987) // Returns 2
SQL 中的截断
不同的数据库系统使用不同的函数。PostgreSQL 和 Oracle 提供了原生的 TRUNC() 函数,而 SQL Server 通常依赖 ROUND(value, decimals, 1) 来强制截断而不是舍入。
常见截断错误
- 认为截断意味着舍入到最接近值: 纠正 — 截断完全忽略丢弃的数字,并且从不向上舍入。
- 认为截断总是向下移动: 纠正 — 它向零移动。对于负数,这意味着该值在技术上是向上移动(例如 −3.9 变为 −3)。
- 将截断与向下取整混淆: 纠正 — 向下取整向负无穷大移动。截断向零移动。
- 将截断与向上取整混淆: 纠正 — 向上取整向正无穷大移动。截断向零移动。
- 忘记负数向零移动: 纠正 — −2.9 截断为 −2,而不是 −3。
- 在需要舍入到最接近值时使用截断: 纠正 — 不要使用截断来近似值;仅在需要硬性截止时使用它。
- 假设丢弃的数字会影响保留的数字: 纠正 — 截断从不根据删除的内容调整保留的数字。
- 将十进制显示格式与数学截断混淆: 纠正 — 隐藏小数的 UI 组件有时会在底层应用舍入。验证您的展示层。
- 在财务计算中未检查所需规则而使用截断: 纠正 — 财务数学通常强制要求标准化的舍入规则,以避免破坏价值。
截断快速参考
向零截断去除小数部分,不对剩余值进行舍入。
| 输入 | 截断为整数 |
|---|---|
| 2.9 | 2 |
| 2.1 | 2 |
| −2.9 | −2 |
| −2.1 | −2 |
| 5 | 5 |
| −5 | −5 |
截断练习
通过这些示例测试您的知识。点击以显示截断后的答案。