Do string validation before parsing.
...this is NOT the right place for this. At some point, we need to either use std::stof directly and/or just accept that we need to use exceptions.
This commit is contained in:
+15
-7
@@ -1753,19 +1753,27 @@ void MakeLower( wchar_t *p, size_t iLen )
|
|||||||
|
|
||||||
float StringToFloat( const RString &sString )
|
float StringToFloat( const RString &sString )
|
||||||
{
|
{
|
||||||
float ret = strtof( sString, nullptr );
|
RString toTrim = sString;
|
||||||
|
Trim(toTrim);
|
||||||
if( !isfinite(ret) )
|
if (toTrim.size() == 0)
|
||||||
ret = 0.0f;
|
{
|
||||||
return ret;
|
return 0;
|
||||||
|
}
|
||||||
|
return std::stof(toTrim);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool StringToFloat( const RString &sString, float &fOut )
|
bool StringToFloat( const RString &sString, float &fOut )
|
||||||
{
|
{
|
||||||
|
RString toTrim = sString;
|
||||||
|
Trim(toTrim);
|
||||||
|
if (toTrim.size() == 0)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
char *endPtr;
|
char *endPtr;
|
||||||
|
|
||||||
fOut = strtof( sString, &endPtr );
|
fOut = strtof( toTrim, &endPtr );
|
||||||
return sString.size() && *endPtr == '\0' && isfinite( fOut );
|
return *endPtr == '\0' && isfinite( fOut );
|
||||||
}
|
}
|
||||||
|
|
||||||
RString FloatToString( const float &num )
|
RString FloatToString( const float &num )
|
||||||
|
|||||||
+3
-1
@@ -406,7 +406,10 @@ void MakeLower( char *p, size_t iLen );
|
|||||||
void MakeUpper( wchar_t *p, size_t iLen );
|
void MakeUpper( wchar_t *p, size_t iLen );
|
||||||
void MakeLower( wchar_t *p, size_t iLen );
|
void MakeLower( wchar_t *p, size_t iLen );
|
||||||
|
|
||||||
|
// TODO: Have the three functions below be moved to better locations.
|
||||||
float StringToFloat( const RString &sString );
|
float StringToFloat( const RString &sString );
|
||||||
|
bool StringToFloat( const RString &sString, float &fOut );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Have a standard way of converting floats to strings.
|
* @brief Have a standard way of converting floats to strings.
|
||||||
*
|
*
|
||||||
@@ -414,7 +417,6 @@ float StringToFloat( const RString &sString );
|
|||||||
* @param num the number to convert.
|
* @param num the number to convert.
|
||||||
* @return the string as trimmed as it can be. */
|
* @return the string as trimmed as it can be. */
|
||||||
RString FloatToString( const float &num );
|
RString FloatToString( const float &num );
|
||||||
bool StringToFloat( const RString &sString, float &fOut );
|
|
||||||
|
|
||||||
RString WStringToRString( const wstring &sString );
|
RString WStringToRString( const wstring &sString );
|
||||||
RString WcharToUTF8( wchar_t c );
|
RString WcharToUTF8( wchar_t c );
|
||||||
|
|||||||
Reference in New Issue
Block a user