【发布时间】:2021-03-08 03:55:50
【问题描述】:
所以,对此非常陌生。在我抓住它并将其放入向量之后,我试图将文本文件的输入从字符串更改为双精度。我想对这些数字执行数学运算,并且在我从字符串转换为双精度后,其中一些数字缺少一两个数字。 (文件从 doc 转换为 txt,因为我不知道如何访问 doc 文件,如果这是错误的,请告诉我)。我会在这个问题中包含 txt 文件,但我不知道如何。所以如果有必要,请告诉我如何。 随意批评代码,总是愿意学习。我需要它。 :)
数字采用这种精确格式 -> 0.00000 其中一些在转换后以 0.0000 或 0.000 的形式出现
int main()
{
std::string lines;
std::vector <std::string> numbers{};
std::vector <double> dbnumbers{};
std::ifstream myfile("data.txt");
while (myfile >> lines)
{
numbers.push_back(lines);
}
for (int i = 0; i < numbers.size(); ++i)
{
std::string tempstring;
tempstring = numbers[i];
std::stringstream tempd(tempstring);
double line{};
tempd >> line;
dbnumbers.push_back(line);
}
for (auto element : numbers) std::cout << element << " / ";
for (auto element2 : dbnumbers) std::cout << element2 << " / ";
return 0;
}
【问题讨论】:
-
您可以通过使用
double line = atof(tempstring.c_str());直接从字符串转换为双精度代码来简化您的代码,为此您需要#include <stdlib.h>。如果你想以 5 的精度打印出你的双打,你可以使用std::cout << std::fixed << std::setprecision(5) << your_double_var;,你需要#include <iomanip.h>。试一试。 -
请编写一个小的输入文件并编辑您的问题,说明预期的输出以及原因。
-
您的问题可能是几个问题之一。首先,您要转储字符串和
double值。后者在作为格式化输出发送到流时具有特定的格式化特征(宽度和精度)。除非您更改这些特征,否则它们具有一些非常基本的默认值。其次,您选择的示例 (0.00000) 不可能更糟,因为从中我们不能说转换为double时是否存在准确性问题(并不总是准确),还是格式问题(我已经讨论过了)。 0 始终为零,但如果您的 real 数据是其他数据... -
-Costantino:输入文件看起来像 -> 1.58231 等。在每个新行上。我想要的输出正是这些数字,其中一些以 ex 的形式出现。 1.582 或 1.5823 从字符串转换为双精度。但是 rturrado 的回答解决了它:)。
-
-WhozCraig :我明白你在说什么,这是有价值的信息。这些是我仍然需要善于记住的东西。我大约 3 个月前才开始在便宜的手机上学习代码,两周前买了一台笔记本电脑,所以提醒一下这类信息是很好的。谢谢你:)