首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++:在比默认精度更高的文件中写入doubles

C++:在比默认精度更高的文件中写入doubles
EN

Stack Overflow用户
提问于 2011-07-11 17:50:34
回答 4查看 8K关注 0票数 4

我想把双精度数写到一个文件中,但是字符串转换降低了精度。编辑:我不是真的投,而是把替身放在一个固定的流中。

除了使用模数和除法解析每个数字之外,还有其他方法可以更精确地写出双精度数吗?

编辑:我的应用程序需要可移植

下面是我当前的代码:

代码语言:javascript
运行
复制
std::string arraytocsv(double v[], int size) {  
    std::ostringstream oss;
    for (int i = 0; i < size; i++) {
        oss << v[i] << ";";
    }
    oss << std::endl;
    return oss.str();
}

我已经有了precision()函数,它可以工作。谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-11 17:53:09

您可以使用precision函数。

票数 9
EN

Stack Overflow用户

发布于 2011-07-11 18:33:23

在声明字符串流之后,更改其行为:

代码语言:javascript
运行
复制
std::ostringstream oss;
oss.flags (std::ios::scientific);
oss.precision (std::numeric_limits<double>::digits10 + 1);

第一个调用oss.flags()强制C++ I/O在这个字符串流上使用科学记数法,即使是在pi这样的东西上。在固定记数法中打印小于1.0的数字将失去精度,而在固定记数法中打印大数字则是极端的夸大其词。

第二次调用时,oss.precision()告诉C++ I/O在小数点后打印多少位数字。使用digits10+1告诉它打印一个多余的数字;digits10告诉系统能够在不损失精度的情况下表示多少个数字。

由于该std::numeric_limits<double>::digits10,您将需要#include。

票数 3
EN

Stack Overflow用户

发布于 2011-07-11 17:54:20

用二进制编写。默认情况下,这是不可移植的(因为序列化格式依赖于体系结构)

而不是

代码语言:javascript
运行
复制
double myvalue = 123.4;
file << myvalue;

代码语言:javascript
运行
复制
double myvalue = 123.4;
file.write((const char*) &myvalue, sizeof(myvalue));

当然,这假设您不需要人类阅读本文(尽管可以使用od这样的UNIX工具)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6648403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档