windows 如何将double FLT_MAX转换为int?

hivapdat  于 2023-04-07  发布在  Windows
关注(0)|答案(1)|浏览(131)

我有时会从一个函数返回FLT_MAX或FLT_MAX / 2。
我现在必须将这个值转换为int或long int,以便进一步计算。

#define FLT_MAX          3.402823466e+38F        // max value  

double f =  FLT_MAX;  
long long int n = static_cast<long long int>(f); // result is -9223372036854775808

我得到了错误的结果:-9223372036854775808!?
我到底需要哪种数据类型?
更新:这是函数,它可能具有很大的价值:

int numPlaces(long int n) {
    if (n < 0) return numPlaces((n == INT_MIN) ? INT_MAX : -n);
    if (n < 10) return 1;
    return 1 + numPlaces(n / 10);
}
mlnl4t2r

mlnl4t2r1#

这对我很有效:

#include <iostream>
#include <string>     // std::string, std::to_string
#define FLT_MAX          3.402823466e+38F        // max value  

int numPlaces(double f) {
    std::string s = std::to_string(f);
    return s.find('.');
}

int main()
{
    double f = FLT_MAX;
    std::cout << numPlaces(f);
}

相关问题