我有一个字符串
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
是否有可能准确地做到这一点? (我知道使用花车时存在不准确性,但是有更好的方法吗?)
答案 0 :(得分:2)
值11.8999996
是11.9
的最精确近似值,可由float
类型表示。
答案 1 :(得分:2)
唯一的方法是使用十进制浮点类型。如果您的平台有FLT_RADIX == 10
,那么您可以直接使用float
,但显然不是您的情况,并且我不知道任何使用十进制浮点数的当前系统{{3} }。
所以你需要一个自定义类型。您可以使用某些IEEE-754 decimal32库,例如except IBM z-series,或者如果您使用gcc,它已经通过_Decimal32
类型支持Intel® Decimal Floating-Point Math Library
您可以在此问题中找到更多信息decimal float