【问题标题】:Double data stored in char array returns a float value存储在 char 数组中的双精度数据返回一个浮点值
【发布时间】:2014-07-26 17:16:35
【问题描述】:

为什么当我将一个双精度值的数据存储在一个字符数组中时,如果我从一个字符数组中获取数据到另一个双精度值,它会返回一个浮点值?

在这个:

double vals = 3.141592654;
char xvals[sizeof(vals)];
memcpy(&xvals, &vals, sizeof(xvals));

double y;
memcpy(&y, &xvals, sizeof(xvals));
std::cout<<y<<"\n";

输出:3.14159

【问题讨论】:

  • double vals = 3.141592654; std::cout&lt;&lt;vals &lt;&lt;"\n"; 打印什么?
  • 你确定它返回一个float吗? ISTM 它只是为了输出而四舍五入。
  • omg yesss x3 谢谢,我得到了下面的答案,但我认为这将是一个已知的小数位数......那么如果我想从用户自定义值返回一个双精度值怎么办?结果中的小数位数未知。例如,如果有 20 位小数,我如何获得小数位数然后使用 std::

标签: c++ c


【解决方案1】:

它不会“返回浮点值”:std::cout 默认不会打印所有这些数字。

您可以使用std::setprecison(来自&lt;iomanip&gt;)来更改要打印的位数:

#include <iostream>
#include <iomanip>

int main()
{
    double vals = 3.141592654;
    std::cout << vals << "\n";

    std::cout << std::setprecision(10);
    std::cout << vals;
    return 0;
}

输出:

3.14159

3.141592654

【讨论】:

  • 哦,我明白了。因此,如果我将 setprecision 与不同数量的小数放在一起,它将使其永久用于下一个双精度值。哦,我明白了 :D 但是如果我得到一个小数未知的除法并想计算它呢?如何获得双精度数中的小数位数?
  • 这是另一个任务。看这里:stackoverflow.com/questions/9999221/…
【解决方案2】:

没有数据丢失或强制转换。 cout 的默认 precision 是 6。这将为您提供所需的答案

std::cout<<std::setprecision(10)<<y<<"\n";

编辑:您需要为std::setprecision 包含标题&lt;iomanip&gt;

【讨论】:

  • 谢谢! :D 你还应该引用这包含在 中 :D 谢谢 ^_^
猜你喜欢
  • 1970-01-01
  • 2019-04-30
  • 2014-12-09
  • 2022-11-19
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多