将 int 转换为浮点数
Converting int to float?
每当我尝试编译时,我都会得到
24 [警告] 从float
转换为int
83 [警告] 从float
转换为int
int a , b = 8;
float c = 5.2;
float d = 8E3;
a = static_cast<float>(b) * c; // 24
cout << a << "n";
cout << d << "n";
int x, y, answer;
x = 7;
y = 9;
answer = 5;
answer *= (x + y);
cout << answer << "n";
answer *= x + y;
cout << answer << "n";
float m = 33.97;
answer += (x + y + m); // 83
cout << answer << "n";
关于我做错了什么的任何建议?
a = static_cast<float>(b) * c;
a
是一个int
,方程的右边是两个floats
的乘法,这将产生一个中间float
值,然后隐式地转换为int
,导致你看到的警告。
也:
answer += (x + y + m);
answer
是int
类型,x
和y
也是如此,但m
是float
,再次导致右侧的中间结果是float
。
这些转换将导致截断float
结果的小数值。 您可以通过显式转换为int
来消除警告:
a = static_cast<int>(static_cast<float>(b) * c);
answer += static_cast<int>(x + y + m);
好吧,您只是收到警告,因为编译器正在将浮点值更改为整数,从而截断结果。
int a;
float f = 3.2;
a = f; // a is 3, a trunctated 3.2
您的问题似乎是关于从浮点数到 int 的转换,而不是从 int 到 float 的转换。
基本上你没有做错任何事。这只是一个警告,因为该值将被截断(也许您不希望如此)。要告诉编译器你真的想从浮点数中获取一个 int,你可以使强制转换显式,如下所示:
a = static_cast<int>(static_cast<float>(b) * c);
然后它不会再警告你了。
相关文章:
- 将浮点数转换为无符号字符数组并打印出来
- 如何将浮点数转换为uint8_t?
- 为什么C++在将浮点数转换为字符时没有显示缩小转换错误?
- 将浮点数转换为字符串时如何加快此代码的速度?
- C/C++ - 将浮点数转换为字节数组,以便字节保持排序
- 精确且无公差地将浮点数转换为字符串
- 错误:请求从 std::chrono::time_point 浮点数转换为非标量类型长整型
- 将浮点数转换为 LPCTSTR 转换
- 无法在初始化时将浮点数转换为浮点数
- 将浮点数转换为 int,带和不带强制转换
- 将浮点数转换为 int,或将 int 强制转换为浮点数
- 将浮点数转换为字符串,并指定精度和十进制数字数?
- 将范围有限的浮点数转换为无符号的整数,以保持排序顺序和精度
- 如何将浮点数转换为保留位值的整数
- 将浮点数转换为 LPCWSTR
- 正在将浮点数转换为整数定义的行为
- 将浮点数转换为整数时如何舍入
- 将浮点数转换为浮点数*
- 无需任何库函数即可将浮点数转换为字符串的有效方法
- 将浮点数转换为 4 uint8_t