ansi c中的转换问题[重复]

问题描述

|                                                                                                                   这个问题已经在这里有了答案:                                                      

解决方法

        drhirsch是正确的-5.55不能精确地表示为二进制浮点数(就像1÷7不能精确地表示为十进制一样)。 但是,就您的目的而言,这应该不成问题,因为浮子绝对可以将5.55精确地存储到三个位置,这就是您所拥有的数量。这只是意味着您在打印时需要使用正确的格式-在这种情况下为
%.3g
。在计算GPA时,您的计算仍将精确到三位,因为平均值的计算不会导致灾难性的抵消。     ,        请参阅此StackOverflow文章。 浮点数会出现一些问题,这些问题代表您想要的精确值,而无需进行其他工作。您将面临两个问题(在链接的文章中进行了介绍)-实际的舍入和格式设置。     ,        简短的答案:
atof(\"5.55\")
永远不会返回该十进制分数的精确(表示精确)表示形式,因为不存在该数字的精确二进制浮点表示形式,它是一个无限的二进制分数。 要获得较长答案,请参见http://www.math.umd.edu/~jkolesar/mait613/floating_point_math.pdf。