我有一个字符串
strValue = "11.900000"
我想将其解析为浮点值。所以我尝试了:
float fValue = -1;
sscanf_s(strValue.c_str(), "%f", &fValue);
try
{
double test = std::stod(strValue, &sz);
fValue = (float) std::stod(strValue, &sz);
}
catch (...)
{
fValue = -1;
}
对于double
,它是准确的:
test = 11.900000000000000
对于float
,这是不准确的:
fValue = 11.8999996
是否有可能准确地做到这一点? (我知道在使用浮点数时存在误差,但是有更好的方法吗?)
11.8999996
值是11.9
的最精确近似值,可以用float
类型表示。
对于
唯一的方法是使用decimal floating-point类型。如果您的平台具有FLT_RADIX == 10
,则可以直接使用内置的FLT_RADIX == 10
,但是显然不是您的情况,并且我不知道任何使用十进制浮点数float
的当前系统。
因此您需要为此使用自定义类型。您可以使用某些[-C0]或except IBM z-series等IEEE-754十进制32库。或者,如果您使用gcc,则它已经通过Intel® Decimal Floating-Point Math Library类型具有libdfp
您可以在此问题中找到更多信息support for decimal float