Q当我将一个float变量设置为,比如说,3.1 时,为什么printf会打印出 3.0999999?
A大多数计算机像处理整数一样,也使用二进制来处理浮点数,就像十进制一样,并非所有分数都能在二进制中精确表示。众所周知,在十进制中,像 1/3 = 0.333333... 这样的分数会无限循环。事实证明,在二进制中,十分之一也是一个无限循环的分数(0.0001100110011...),因此像 3.1 这样的精确十进制分数在二进制中无法精确表示。取决于您的编译器二进制/十进制转换例程(例如printf使用的例程)的编写有多么精细,当那些不能在二进制中精确表示的数字被赋值或读取,然后打印出来(即从十进制转换为二进制再转换回十进制)时,您可能会看到差异。 [脚注] 另请参阅问题 14.6。