从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);

最新更新