如何在C++和R中使用完全相同的数字格式?

tfl*_*tre 3 c++ formatting r

我正在用R ++ 编写一个C++程序的功能测试.典型的输出文件有一些列为"string",其他列为"double".然后,我想diff用来比较R返回的预期输出文件和C++返回的观察输出文件.

在伪C++中,我只是这样做:

stringstream ssTxt;
ssTxt.precision (7);
ssTxt.setf (ios::scientific);
for(i=0; i<10; ++i){
  ssTxt << names[i] << " " << values[0][i] << " " << values[1][i] << " " << values[2][i] << endl;
  // write in file and clear ssTxt
}
Run Code Online (Sandbox Code Playgroud)

这是一个典型的输出:

item1 2.8200000e-01 500 4.1846912e-04
Run Code Online (Sandbox Code Playgroud)

在R中,我这样做:

results <- data.frame(name="item1", val1=0.282, val2=500, val3=0.00041846912873)
write.table(x=format(results, digits=8, nsmall=7, scientific=TRUE), file=...)
Run Code Online (Sandbox Code Playgroud)

以下是对应于相同数据的输出:

item1 2.82e-01 500 4.1846912e-04
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,它几乎可以工作,但R在"2.82"之后不会添加尾随0.我更喜欢更改R代码而不是C++代码.那我该怎么办呢?

GWD*_*GWD 6

你试过
sprintf还是formatC

具体而言,我认为

sprintf("%e", 2.82e-01) 
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩,但如上所述,看看帮助(sprintf),它描述了这个功能的各种格式化功能......