浮点数位转换工具

输入十进制数,或以十六进制输入浮点数的位,即可看到计算机如何存储它。页面会画出符号、指数和尾数字段,并给出实际保存的精确值。

免费 在浏览器中运行 核对于2026年11月11日星期三

此工具在您的浏览器中运行。您输入的内容不会发送给我们。

使用方法

  1. 选择 “格式”:半精度、单精度或双精度。
  2. 在 “输入” 下,选择 “十进制数” 以转换数字,或选择 “位模式(十六进制)” 以读取已存储的位。
  3. 在 “数值” 中输入数值,页面会随您的输入更新。
  4. 阅读彩色的位、“字段” 表和结果表。只有输入十进制数时才显示舍入误差。

一个数如何分成字段

二进制浮点数有三个字段:符号位、指数字段和尾数字段。单精度使用1、8和23位;双精度使用1、11和52位;半精度使用1、5和10位。对于规格化数,其值为 (−1)^符号 × 1.尾数 × 2^(指数字段 − 偏置),单精度的偏置为127(IEEE 754 定义了这些二进制格式的字段)。

0.15625 = 1.25 × 2^−3  →  sign 0, exponent 127 − 3 = 124 = 01111100, fraction 0100… → 0 01111100 01000000000000000000000 = 3E200000

舍入到最近的值

大多数十进制数无法在二进制中被精确存储。页面会把输入的数舍入到该格式能存储的最近的值;若恰好位于中间,则取末位为偶数的那个值。两个相邻值之间的距离是一个 ulp(末位单位),舍入误差至多为半个 ulp。对于单精度的0.1,存储值为0.100000001490116119384765625,因此误差为 +1.49 × 10^-9,即0.2 ulp。

特殊值

  • 零:指数和尾数全为零。它的符号位被保留,因此 −0与 +0是两种不同的位模式。
  • 次正规数:指数字段全为零,且没有隐藏位。它们填补了零与最小规格化数之间的空隙。
  • 无穷大:指数全为1,尾数全为零。舍入后超过最大有限数的十进制数会变为无穷大。
  • NaN:指数全为1,且尾数不为零。尾数的最高位区分安静 NaN 与信号 NaN;其余尾数位即为负载。

页面不涵盖的内容

  • 运算:页面显示一个数如何被存储,而不是两个已存储的数相加或相乘的结果。
  • IEEE 754-2008的十进制浮点格式(以10为基数),以及 bfloat16 或8位浮点等其他格式。
  • 二的补码整数:请参阅 补码计算器。

示例:单精度下的0.1

在 “格式” 中选择单精度,输入0.1。0.1 = 1.6 × 2^−4,而有效数1.6无法用23个尾数位精确写出。尾数向上舍入,因此存储的值比0.1略大。

结果 值
十六进制 3DCCCCCD
实际存储的精确值 0.100000001490116119384765625
舍入误差(存储值减去输入值) +1.490116119384765625e-9
以 ulp 计的舍入误差 +0.200

常见问题

为什么计算机中 0.1 + 0.2不等于精确的0.3?

0.1和0.2都无法在二进制中被精确存储,它们的和还要再次舍入。双精度下,0.1 + 0.2的结果是0.30000000000000004,它正好比存储的0.3大一点。

实际存储的精确值与输入的数有什么区别?

输入的数是您写下的十进制数,实际存储的精确值则是该格式真正保存的二进制数,并完整写出。两者之差就是舍入误差,因此您可以看到二者相差多少。

ulp 是什么意思?

ulp 即末位单位,是存储值与同一二的幂区间内下一个值之间的间隔。舍入到最近的值时,误差永远不会超过半个 ulp,页面既以数值也以 ulp 给出误差。

为什么 1e39 在单精度下会变成无穷大?

单精度的最大值约为 3.4028235 × 10^38。舍入后超过它的数没有有限的存储值,因此该格式使用无穷大,页面会把结果标为过大。

NaN 能保存信息吗?

可以。NaN 的尾数位不用于它的值,因此程序可以把负载存放在那里。页面会把 NaN 的尾数显示为负载,并标明它是安静型还是信号型。

资料来源

数据和文字最近核对于2026年11月11日星期三。

我们使用必要的 Cookie 来运行网站。经您同意后,Google 还会使用广告 Cookie 展示个性化广告。如果您拒绝,仍会看到广告,但广告不会个性化。