C++ 为什么双精度到整数的转换不起作用?

C++ 为什么双精度到整数的转换不起作用?,c++,type-conversion,C++,Type Conversion,我一直在寻找一个合适的解释来解释为什么会发生这种情况,但我还是不太明白,所以如果这是一个转载,我道歉 #include <iostream> int main() { double x = 4.10; double j = x * 100; int k = (int) j; std::cout << k; } Output: 409 #包括 int main() { 双x=4.10; 双j=x*100; int k=(int)j

我一直在寻找一个合适的解释来解释为什么会发生这种情况,但我还是不太明白,所以如果这是一个转载,我道歉

#include <iostream>
int main()
{
    double x = 4.10;
    double j = x * 100;

    int k = (int) j;

    std::cout << k;
 }

 Output: 409
#包括
int main()
{
双x=4.10;
双j=x*100;
int k=(int)j;

std::cout4.1不能用一个
double
来精确表示,它可以用一个非常小的东西来近似表示:

double x = 4.10;
printf("%.16f\n", x);  // Displays 4.0999999999999996
因此
j
将是比410(即409.99…)稍小的值。将
int
转换为该值将丢弃小数部分,因此得到409

(如果您想要另一个显示类似行为的数字,您可以尝试8.2、16.4或32.8……看到模式了吗?)

强制性链接:。

试试这个

#include <iostream>
#include "math.h"
int main()
{
double x = 4.10;
double j = x * 100;

int k = (int) j;

std::cout << trunc(k);
std::cout << round(k);
}
#包括
#包括“math.h”
int main()
{
双x=4.10;
双j=x*100;
int k=(int)j;

std::cout修复

int k = (int)(j+(j<0?-0.5:0.5));

intk=(int)(j)+(J它的可能重复只会让我头晕目眩,试图将它缠绕在报告类似问题的人身上,而不提供他们遇到了什么问题的信息。我自己也使用过这个非常简单的舍入公式,但它对负数不太有效。谢谢!我肯定会使用它。谢谢你的解释,非常好链接