如何计算浮点值并转换为uint8_t?计算结果异常求修正
问题分析与解决
问题根源
这段代码的问题出在运算符优先级上:progress = (uint8_t)value*progress;
强制类型转换(uint8_t)的优先级比乘法*高,所以会先把value(值为0.5)转换成uint8_t类型——浮点转无符号8位整数会直接截断小数部分,结果就是0。之后0乘以原来的progress值50,最终得到0。
修正代码
把乘法运算放在强制类型转换的括号里,先计算浮点乘法,再转成uint8_t:
#include <iostream> using namespace std; int main() { uint8_t remaining = 1; uint8_t total = 2; uint8_t progress=50; float value=0; value = (float)(total-remaining)/total; progress = (uint8_t)(value*progress); // 调整括号位置,先算乘法再转类型 cout<<"value:"<<value<<endl; cout<<"progress:"<<(unsigned)progress<<endl; return 0; }
运行结果
value:0.5 progress:25
内容的提问来源于stack exchange,提问作者Nick Lee
相关产品推荐
相关产品推荐

