我只想将小数部分提取为整数,但这并不像我想象的那么容易。在搜索过程中,我发现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);