C 如何将浮点数舍入为两个小数点?

C 如何将浮点数舍入为两个小数点?,c,C,我写了一个程序,在这个程序中,计算机向用户请求一个浮点数。例如,如果我的输入为0.41,则printf中的输出为0.40999999。如何解决此错误?这很简单。使用: printf("%.2f", 0.409999999); 这将打印0.41大多数浮点数据类型本质上是不精确的。他们试图将实数(无限精度)存储在有限精度位向量中。因此,在您的平台上,0.41的最接近表示形式可能是0.40999999 您应该仔细阅读IEEE754浮点表示,了解您遇到的问题。 %f(作为浮点打印) %4f(以浮点打印

我写了一个程序,在这个程序中,计算机向用户请求一个浮点数。例如,如果我的输入为0.41,则printf中的输出为0.40999999。如何解决此错误?

这很简单。使用:

printf("%.2f", 0.409999999);

这将打印0.41

大多数浮点数据类型本质上是不精确的。他们试图将实数(无限精度)存储在有限精度位向量中。因此,在您的平台上,0.41的最接近表示形式可能是0.40999999

您应该仔细阅读IEEE754浮点表示,了解您遇到的问题。

  • %f(作为浮点打印)
  • %4f(以浮点打印,宽度至少为4宽)
  • %.4f(以浮点形式打印,小数点后精度为四个字符)
  • %3.2f(以浮点形式打印,宽度至少为3,精度为2)

阅读例如。请密切注意设置字段宽度的可能性,更重要的是设置精度。您没有显示printf代码。您在哪个平台上?即使在普通32位系统上扫描并以浮点形式存储时,0.41也应该没有问题显示打印的代码
0.40999999
我正在CS50 IDE平台上工作详细信息:浮点数据类型非常精确,每个有限值都是精确的。使用这些类型的函数和操作是不精确性的根源<代码>双x=0.41
x
具有精确的值-可能是0.409999999999999975575093458246556110680103302001953125,这不等于0.41。@chux是的,对于它们所做的,它们非常精确。但它们并没有无限的精确性。如果0.41变为0.4099[…]999,那么它接近于,但并不精确地为0.41。一个来自ints的新开发人员,第一次使用float时可能没有意识到这一点;因此,当他从0.41构建一个浮点值时,想知道他做错了什么,只得到了真正接近该值的值。。。当然,如果OP是一名拥有5年以上经验的软件工程师,那么这是一个简单的问题。对于新手来说,这没关系(所以我给出了一个真实的答案,而不是“天哪,你应该知道”)