C++ 为什么同一变量的值因格式不同而不同

C++ 为什么同一变量的值因格式不同而不同,c++,C++,为什么x会改变值,不应该是1234.560000。它显示1234.560059只有这么多的值可以精确地表示为浮点数,而1234.56不是其中之一: #include <iostream> #include <stdio.h> using namespace std; int main() { float x=1234.56; printf("%10f\n", x); return 0; } 此程序打印实际使用的最接近的值:1234.5600585

为什么x会改变值,不应该是1234.560000。它显示1234.560059

只有这么多的值可以精确地表示为浮点数,而1234.56不是其中之一:

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    float x=1234.56;
    printf("%10f\n", x);
    return 0;
}
此程序打印实际使用的最接近的值:1234.56005859375

其值始终为:

public class WhatsTheFloatingPoint
{
    public static void main(String[] args)
    {
        float x = 1234.56f;
        BigDecimal y = new BigDecimal(x);
        System.out.println(y);
    }
}
当你显示更少的数字时,它将舍入映射成二进制分数所需的微小额外数量

这就是为什么浮点等价通常是通过一些可接受的ε或微小的差异来实现的


请注意,关闭的数量可能因体系结构和编译器选项而异,因为1234.56不能用二进制精确表示。@haccks 2的补码,真的吗?@ouah;它被称为脑屁。为什么同样的问题会被反复地发布,这取决于OP做了零研究(一个可能的C++复制品)。您的答案与Java相关。顺便说一句,为什么是Java?@haccks因为Java使我们很容易看到double或float的精确值。我永远记不住合适的C++咒语。
1234.560059...