12

atof または _wtof が文字列を double に変換できないかどうかを検出する方法は? しかし、入力が 0.0 になる可能性があるため、結果が 0.0 と異なるかどうかを確認しようとすることではありません。ありがとう!

4

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