将以下代码视为将字符串日期时间"23/08/1999 23:23:23"
转换为浮点型变量的尝试
std::string datetime = "23/08/1999 23:23:23";
const char* format = "%d/%m/%Y %H:%M:%S";
std::string s{ datetime };
std::tm t{};
std::istringstream ss(s);
ss >> std::get_time(&t, format);
std::time_t timestamp = mktime(&t);
当从time_t
转换为long int
时,static_cast
方法似乎有效:
long int tm = static_cast<long int> (timestamp);
而将float
作为static_cast
类型的方法则面临数据丢失。是否有任何可能的方法将time_t
强制转换为float
,或将std::string datetime
直接转换为float
类型的变量?
如果您需要一个不丢失数据的浮点表示,您可以使用double而不是float。虽然不是所有的长int都可以存储在double中而不损失精度,但对于自epoch以来的秒数(可能是微秒(,double应该足够了。但是,您应该检查正在处理的值的边界,并且您有足够的精度来满足您的需要。查看有关浮点数的行为和限制的教程,了解更多信息。
根据您的需求细节,另一种可能有用的选择是选择过去的最近日期,计算输入日期和该时间点之间的差异,并将其存储起来,这样结果就可以轻松地包含在浮动中。
最后,如果你真的需要在不损失精度的情况下处理这个问题,你可以使用任意精度的数学库,比如https://gmplib.org/(注意,我自己没有试过这个图书馆,但它不会是唯一可用的(。