【问题标题】:Why my double is shown as scientific? [closed]为什么我的替身显示为科学? [关闭]
【发布时间】:2014-11-19 14:57:26
【问题描述】:

如何添加科学数和浮点数?我有类似的东西

 var1 0.99999899 var2  3.5008552e-05 sum  3.5008552e-05

但我不明白为什么首先 var2 显示为科学,而我首先声明了

double var1, var2; 

所以,实际上它们的总和只是 var2...

谢谢

一个

【问题讨论】:

标签: c++


【解决方案1】:

浮点值的显示方式取决于显示它的机制。它不是值本身的属性,也不是以任何方式存储在变量中:

一个数字就是一个数字。你所说的“科学”不是一类数字。它是一类数字表示。同理,“十二”、“12”、“XII”、“一打”、“IIIIIIIIIIII”都代表同一个数字。这种“科学”的东西只有在你决定以某种特定方式表示数字时才存在(即当你输出它时)。计算不会“将数字转化为科学”,就像说“2 * 6 是十二”不会将数字转化为英语单词一样。变量总是存储数字而不是表示。 — R. Martinho Fernandes

你的显示机制——std::cout? ——正在选择输出价值的最佳方式。由于库的限制,您可以使用 IO 操纵器(例如 std::fixed,尽管 it's pretty fiddly sometimes to get it just how you want it)覆盖它。

【讨论】:

  • 我怎样才能将“正确的”总和值(即在 std::fixed 之后)存储在新变量中?实际的问题不仅仅是计算总和而不是使用它......
  • @Just_Newbie:再次阅读我的答案。您不会“存储”显示方式。您存储值本身。如果您对所有变量使用std::fixed,您将准确看到它们包含的值。在所有算术运算期间都会考虑此值,即使您在执行默认 std::cout 运算时没有看到它的全部。请注意,即使在这一切之后,您仍然没有看到您期望的精度,那可能只是因为您的变量下溢。
  • 那有没有办法存储呢?
  • @Just_Newbie:感觉就像你没有在听我说话。 :( 有没有另一种方法可以更清楚地解释这一点?也许你可以问一个更具体的问题,关于你正在尝试做什么以及没有发生什么。
  • 一个数字就是一个数字。你所说的“科学”不是一类数字。它是一类数字表示。同理,“十二”、“12”、“XII”、“一打”、“IIIIIIIIIIII”都代表同一个数字。这种“科学”的东西只有在你决定以某种特定方式表示数字时才存在(即当你输出它时)。计算不会“将数字转化为科学”,就像说“2 * 6 是十二”不会将数字转化为英语单词一样。变量总是存储数字而不是表示。
【解决方案2】:

如果您有<stdio.h> 可用,那么您可以使用int printf ( const char * format, ... );,格式说明符将如下所示:printf("%.5f", your_double) 其中 5 是您想要的小数点后的位数,默认为 6。 (printf docs)

【讨论】:

  • 我不认为鼓励新的 C++ 用户使用过时的 C 习惯是非常负责任的。此外,如果您关心比这更高的精度(考虑到 OP 的值,这一点很清楚),则不太可能需要为 double 打印仅六个有效数字。
猜你喜欢
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多