3

C++ プログラムから人間が読める (テキスト) ファイルに正確な浮動小数点値を保存および復元できる必要があります。sprinf で %A 形式を使用して正確な値を保存できますが、それを復元する方法が見つかりません。sscanf で %A 形式を使用してもうまくいきません。

私のサンプルプログラムは以下です。0X1.921FB4D12D84AP+1 が num1 の値として正常に出力されますが、その値を再度入力すると、num2 が 0 に設定されます。GCC 4.7.3 を使用して Cygwin 環境 (DLL バージョン 1.7.22) で実行しています。 G++ コンパイル オプションには以下が含まれます。 -std=gnu++11 -Wall -Wextra

#include <cstdio>
#include <string>
#include <iostream>

int main () {

    double num1 = 3.1415926;
    double num2;
    std::string input;
    int result;

    printf("%lA\n", num1);

    std::cout << std::endl;
    std::cout << "Input:" << std::endl;
    std::cin >> input;
    std::cout << "Got: " << input << std::endl;

    num2 = 0.0;
    result = sscanf(input.c_str(), "%lA", &num2);
    std::cout << "num2 is " << num2 << " and result is " << result << std::endl;

    return 0;
}
4

1 に答える 1

0

代わりに atof() 関数を使用するか、boost::lexical_cast を使用することをお勧めします。番号に文字列がある場合、どちらもやりたいことを達成します。

于 2013-08-13T01:20:23.217 に答える