3

我需要能够从我的 C++ 程序中将精确的浮点值保存和恢复到人类可读的(文本)文件中。我可以将 %A 格式与 srinf 一起使用来保存确切的值,但我无法找到恢复它的方法。将 %A 格式与 sscanf 一起使用对我不起作用。

我的示例程序如下。它成功地将 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 回答