0

まず、その件に関する他の質問を徹底的に調べましたが、何も役に立ちませんでした。文字列を long double 型に変換する必要がありますが、何もうまくいきません。

string a="634.232";
long double x;
x=strtold(a.c_str(),0);

例: この "strtold" は、この入力この出力に変更します。

4

2 に答える 2

4

エラーを確認します。

#include <cerrno>
#include <cstdlib>
#include <iostream>

const char str[] = "634.232";

int main()
{
    char * e;
    errno = 0;
    long double val = std::strtold(str, &e);

    if (*e != '\0' || errno != 0) { /* error */ std::abort(); }

    std::cout << "SUccessfully parsed: " << val;
}

文字列の解析は、複数の理由で失敗する可能性があることに注意してください。文字列が数値を表していないか、全体として表されていないか、表されている数値が大きすぎてデータ型に収まらない可能性があります。これらすべての可能性をチェックする必要があります。これが、このコードが行っていることです。エンド ポインターeは、文字列全体を消費したことをerrno確認し、変換が成功したことを確認します。

于 2014-10-21T23:46:01.377 に答える
2

strtoldKerekSBが示唆するように、正常に動作するはずです。

ただし、作業を確認している間は、httpstold : //www.cplusplus.com/reference/string/stold/ を使用することをお勧めします。

string a{"634.232"};
long double x{stold(a)};
于 2014-10-21T23:54:33.203 に答える