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