我想把双精度数写到一个文件中,但是字符串转换降低了精度。编辑:我不是真的投,而是把替身放在一个固定的流中。
除了使用模数和除法解析每个数字之外,还有其他方法可以更精确地写出双精度数吗?
编辑:我的应用程序需要可移植
下面是我当前的代码:
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()函数,它可以工作。谢谢
发布于 2011-07-11 17:53:09
您可以使用precision函数。
发布于 2011-07-11 18:33:23
在声明字符串流之后,更改其行为:
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。
发布于 2011-07-11 17:54:20
用二进制编写。默认情况下,这是不可移植的(因为序列化格式依赖于体系结构)
而不是
double myvalue = 123.4;
file << myvalue;
做
double myvalue = 123.4;
file.write((const char*) &myvalue, sizeof(myvalue));
当然,这假设您不需要人类阅读本文(尽管可以使用od
这样的UNIX工具)
https://stackoverflow.com/questions/6648403
复制相似问题