从c++中的浮点运算中获得小数作为整数
getting just decimal as integer from floating in c++
我只想将小数部分提取为整数,但这并不像我想象的那么容易。在搜索过程中,我发现float/decimal
不是我们可以信任的东西。
浮点数学坏了吗?在这里,我得到了答案,为什么它们不能像预期的那样工作,但我如何才能确切地得到小数部分,因为并没有提到数字。目前只有两位小数
double number = 43475.1;
int integerNumber = number;//implicit
double difference = number-integerNumber;
int floatingNumber = difference*100;
std::cout<<"NUMBER = "<<number<<"nintegerNumber = "<<integerNumber;
std::cout<<"nDIFFERENCE INLINE "<< number-integerNumber<<"nDIFFERENCE CALCULATED "<<difference;
std::cout<<"nDIFFERENCE num " << floatingNumber;
这里的输出是
NUMBER = 43475.1
integerNumber = 43475
DIFFERENCE INLINE 0.1
DIFFERENCE INT 0.1
DIFFERENCE num 9
如何获得10
而不是9
。我使用了一个破解,但我真的不相信我自己的答案
std::string str = std::to_string(difference);
int ans = atof(str.c_str())*100;
std::cout<<"nnAFTER CONVERSIONS::: n";
std::cout<<str<<" and realDecimal= "<<ans;
这将导致
AFTER CONVERSIONS:::
0.100000 and realDecimal= 10
这是有效的,但有比转换为字符串并再次转换为整数更好的解决方案吗???
如何获得1而不是9。
首先,乘以10而不是100。其次,使用std::round
:四舍五入到最近的整数而不是零
std::fesetround(FE_TONEAREST);
int floatingNumber = std::round(difference*10);
相关文章:
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 检查输入是否不是整数或数字
- C++使用整数的压缩数组初始化对象
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- C++将浮点指针值舍入为小数位数
- 将浮点除法分解为整数和小数部分
- C++ 将数字的小数部分转换为整数
- 小数、双精度、整数等数据类型的范围
- 显示带小数位数的数字,而不是整数
- 小数并四舍五入为整数
- 如果我使用整数变量,如何在C++中获取小数
- 将分数转换为带有整数的小数C++
- 整数和无效操作数中的小数*已更新
- 检查string是否是有效的整数或小数(正负两种情况)
- 在取小数的整数次幂时保持精度
- 由正整数或正小数组成的字符串,转换为I数字格式