【问题标题】:Write long value as double on a file in c++在 C++ 中的文件上写入 long 值作为双精度值
【发布时间】:2016-10-04 05:02:40
【问题描述】:

我正在使用std::map<string, long>M。我需要在文件上写长值,但要加倍。例如,如果long 的值为 0,那么我需要在文件中写入 0.0,并将 10 写入 10.0,完全采用该格式。我尝试投射double,但在写入文件时,它显示为整数(长整数)。即使我尝试使用std::map<string, double>M,但仍然在打印时,该值被写为整数(长)值而不是小数。如何按照上述格式以double 写入long 值?

对于以下代码:

ofstream write;
write.open("3-mer.txt", std::ofstream::out);
std::map<string, long>::iterator it;
it = C.find(threes);
if(it != C.end())
{
    write << std::setprecision(1) << (double)(it->second) << " ";
}

我得到如下输出:

1 1e+01 0 2e+01 0 1e+01 0 0 0 0 0 0 0 9 0 0 0 
2 0 0 0 0 0 0 0 0 1e+01 0 0 8 0 0 0 0
3 0 0 2e+01 0 0 0 0 0 0 2e+01 2e+01 0 0 0 0 0 

【问题讨论】:

  • 在写入文件之前您是否尝试过std::setprecision()
  • 是的,我做了..也没有用
  • 张贴minimal reproducible example 你实际拥有的东西。
  • 您将不得不在此处添加一段示例代码。没有人知道你在做什么。 setprecision 应该可以工作,如果没有,你可能在做一些奇怪的事情。

标签: c++ types casting type-conversion


【解决方案1】:

你自己弄糊涂了。

你不需要double,你需要一个小数。完全不同的东西。

糟糕但可行的想法,手动打印.0

write << (it->second) << ".0 " ;

【讨论】:

  • 实际上文件中打印的输出将作为另一个文件的输入,其中输入必须作为双精度。如果我这样做,是不是变成了字符串?
  • 您必须决定输出是文本还是二进制文件。如果它是二进制的,你将不得不经历一个完全不同的过程来编写它。
猜你喜欢
  • 2011-01-08
  • 1970-01-01
  • 2015-08-30
  • 2019-12-05
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多