You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么C语言printf函数打印浮点数时取整表现存在差异?

printf打印浮点值表现不一致的原因

这个现象和printf的取整逻辑无关,本质是双精度浮点数的二进制存储精度限制导致的:

  • IEEE 754标准的双精度浮点数(也就是C语言中的double类型)用64位二进制存储数值,只有能表示为 整数/2^n 形式的十进制小数才能被完全精确存储,其余十进制小数只能存储距离它最近的二进制可表示值作为近似。
  • 你测试的三个十进制数值对应的双精度近似值存在差异:
    • 10.10、10.15对应的双精度近似值和十进制原值的误差非常小,当用%.15lf格式保留15位小数打印时,四舍五入后刚好匹配原值的直观表现
    • 10.12对应的双精度近似值本身略小于十进制的10.12,误差在15位小数的量级上刚好可以被观测到,因此打印出来就会显示为10.119999999999999,并不是printf主动做了向下取整操作

你使用的测试代码:

#include<stdio.h>
int main()
{
      printf("10.10 = %.15lf\n", 10.10);
      printf("10.12 = %.15lf\n", 10.12);
      printf("10.15 = %.15lf\n", 10.15);
      return 0;
}

运行输出:

10.10 = 10.100000000000000
10.12 = 10.119999999999999
10.15 = 10.150000000000000

如果将打印精度调整为%.17lf,就能看到三个数值的存储误差全部显现,不存在10.10、10.15完全精确的情况。

内容的提问来源于stack exchange,提问作者Tushar Rathi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:06:00