C++ 为什么即使在从int到double的类型转换之后,小数中也没有小数?
从我收集的资料来看,除非分子或分母是浮点数,否则将分数赋给双精度不会正常工作(所谓“不正常工作”,我的意思是小数被截断,我知道数字当然不能存储为分数)。但是,在将int赋给另一个double变量之前,我尝试将int类型转换为double,但仍然不起作用。这没什么大不了的,因为我只需要做一些小的工作,但为什么会这样呢 我在测试时添加了一些代码C++ 为什么即使在从int到double的类型转换之后,小数中也没有小数?,c++,C++,从我收集的资料来看,除非分子或分母是浮点数,否则将分数赋给双精度不会正常工作(所谓“不正常工作”,我的意思是小数被截断,我知道数字当然不能存储为分数)。但是,在将int赋给另一个double变量之前,我尝试将int类型转换为double,但仍然不起作用。这没什么大不了的,因为我只需要做一些小的工作,但为什么会这样呢 我在测试时添加了一些代码 #include <iostream> using namespace std; double convert(int v) { re
#include <iostream>
using namespace std;
double convert(int v) {
return v;
}
int main() {
int a = 5;
int b = 2;
double n;
n = convert(a) / convert(b);
cout << n << endl; // Decimals are stored
a = static_cast<double> (a);
b = static_cast<double> (b);
n = a / b;
cout << n << endl; // Decimals are cut off
a = (double) a;
b = (double) b;
n = a / b;
cout << n << endl; << // Decimals are cut off
double c = a;
double d = b;
n = c / d;
cout << n << endl; // Decimals are stored
return 0;
}
因为
a / b;
是整数除法(因为两个操作数都是int
),也就是说,输出是整数,在计算结果时,是否将输出赋值为double
或任何其他值都是无关的。因为整数除法
<代码> < < <代码> >代码> b/COD>是整数,所以结果也是一个整数,这是C++的规则,所以<代码> 5/2=2 < /COD>。整数2
然后转换为double
,然后打印为2
当你开始除法的时候,你又回到了整数运算。要通过除法将浮点转换为“粘滞”,需要避免将其丢弃。您可以将转换后的值分配给新变量,如中所示
double aa = static_cast<double> (a);
double aa=静态(a);
或者在与除法相同的表达式中进行转换
n = static_cast<double>(a) / b;
n = a / static_cast<double>(b);
n = static_cast<double>(a) / static_cast<double>(b);
n=static_cast(a)/b;
n=a/静态铸件(b);
n=静态浇铸(a)/静态浇铸(b);
这三个选项中的任何一个都将触发浮点除法。b=(double)b
这将获取一个int
将其强制转换为double
。。。并将其再次转换回int
,因为这是b
的不可修改类型。
int a = 5;
a = static_cast<double> (a);
a = static_cast<int> ( static_cast<double> (a) );
double aa = static_cast<double> (a);
n = static_cast<double>(a) / b;
n = a / static_cast<double>(b);
n = static_cast<double>(a) / static_cast<double>(b);