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