恋喵大鲤鱼
2018-05-09 07:21
采纳率: 43.6%
浏览 2.2k
已采纳

printf关于浮点数的四舍五入的奇怪问题?

#include

#include
using namespace std;

int main()
{
double lfOut=(4.1*3.0*2.5*0.65-1)*2; //37.975

double lfOut2=37.975;
printf("%.2f\n",(double)(37.975)); //输出37.98,有进位
printf("%.2f\n",lfOut); //输出37.97,无进位,为什么?
printf("%.2f\n",lfOut2); //输出37.98
cout<<"lfOut:"<<lfOut<<endl; //输出37.975

}

上面通过表达式计算出来37.975使用 "%.2f"输出时,为什么没有进位呢?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • ma0659zhennan 2018-05-09 08:17
    已采纳

    图片说明

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 白色一大坨 2018-05-09 07:41

    float精度只有6位,如果你个位数只有1位,就可以保证小数点后两位了,而double有16位精度,故可以保证小数点后几位。

    评论
    解决 无用
    打赏 举报
  • ma0659zhennan 2018-05-09 08:16

    ‡ lfOut 37.974999999999994 double 四舍五入,结果是37.97

    评论
    解决 无用
    打赏 举报
  • jena_wy 2018-05-09 11:01

    数据是37.97499999999

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题