C++ 无明显原因,输入双精度变小

C++ 无明显原因,输入双精度变小,c++,C++,因此,当我输入一个像12.45这样的十进制数时,它会减少0.00001,或者导致我的函数工作不好 例如: 如果观察x时x为12.45,div为0.1,则可以看到它变为12.44999999 但是 如果x为12.455,div为0.01,则不会减少x double round(double x, double div){ if (div != 0){ double temp2 = 0; int temp = x; double dec = x - temp; dec = dec/div; temp

因此,当我输入一个像12.45这样的十进制数时,它会减少0.00001,或者导致我的函数工作不好

例如: 如果观察x时x为12.45,div为0.1,则可以看到它变为12.44999999

但是 如果x为12.455,div为0.01,则不会减少x

double round(double x, double div){
if (div != 0){
double temp2 = 0;
int temp = x;
double dec = x - temp;
dec = dec/div;
temp = dec;
temp2 = dec-temp;
temp2 = temp2 * div;
cout << x << endl << endl;
if (temp2 >= div/2){
    x+=(div-temp2);
}else{
    x-=temp2;
}
cout << temp << "  " << dec << "  " << x << "  " << temp2 << "  " << div/2;
return x;
   }else{
    cout << "div cant be equal to zero" << endl;
}
}
双圆(双x,双div){
如果(div!=0){
双temp2=0;
int-temp=x;
双dec=x-温度;
dec=dec/div;
温度=12月;
temp2=十二月温度;
temp2=temp2*div;

cout您的程序将被遗漏,无法运行

这是本标准中定义的编程语言处理浮点值的方式。

它们通常需要四舍五入,以适应其有限表示,这使得它们难以比较。

您看到的问题是舍入误差的产物。

浮点数学并不精确。我不断的质疑:浮点数学本身就是精确的。它不代表实数,因此人们多年来对现实世界中的算术产生的直觉往往会产生误导。因此我必须使用舍入函数来生成舍入函数。如何作为第一个舍入函数那是什么?