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 に答える