atof または _wtof が文字列を double に変換できないかどうかを検出する方法は? しかし、入力が 0.0 になる可能性があるため、結果が 0.0 と異なるかどうかを確認しようとすることではありません。ありがとう!
8412 次
2 に答える
15
使用しないでくださいatof。代わりに、 from を使用しstrtod、 from<cstdlib>もチェックerrnoし<cerrno>ます。
// assume: "char * mystr" is a null-terminated string
char * e;
errno = 0;
double x = std::strtod(mystring, &e);
if (*e != '\0' || // error, we didn't consume the entire string
errno != 0 ) // error, overflow or underflow
{
// fail
}
ポインターeは、最後に消費された文字の 1 つ後ろを指します。キャラクターが消費されたe == mystrかどうかを確認することもできます。
から -stringsを操作std::wcstodするためのものもあります。wchar_t<cwstring>
C++11 にはstd::to_string/ std::to_wstring、 fromもあり<string>ますが、変換が失敗すると例外がスローされると思います。これは、外部データを処理するときに望ましい失敗モードではない可能性があります。
于 2012-09-11T11:53:12.043 に答える
1
を使用するatofと、できません。ただし、これは C++ であるため、 を使用して、に適用した後std::stringstreamに で確認することをお勧めします。operator !operator >>double
于 2012-09-11T11:53:30.967 に答える