【问题标题】:Float type is saved as exp浮点类型保存为 exp
【发布时间】:2016-03-19 15:05:39
【问题描述】:

我做了一些计算,结果是 0.000137*0.000137= 0.000000018769

我将答案保存在 float y 中

但是好像保存为1.88788682e-008

我希望它保存为 0.000000018769

我尝试了 double 类型,但得到了相同的答案

int main()
{
 float y= 0.000137*0.000137;

return 0;

}

调试时手表中出现 0.000137*0.000137

【问题讨论】:

  • 你如何“保存”它以及在哪里?显示一些代码。
  • 我的意思是浮动 y = 0.000137*0.000137 @SamiKuhmonen
  • 我们无法指出我们看不到的代码中的错误。
  • 那不是保存。那就是分配一个变量。它本身没有文本表示。无论您使用什么来显示值,都在转换为文本。你能说出真正的问题是什么吗?
  • 不过,首先,不要被科学记数法吓到。这就是您的值如何输出到屏幕,而不是它的保存方式。但令人担忧的是,这些值实际上是不同的。

标签: c++ double decimal rounding


【解决方案1】:

您无法真正控制浮点数的存储方式(无论如何这几乎无关紧要)。不过,您确实可以控制它们的打印方式。如果您想在没有科学记数法的情况下将它们打印出来,您可以使用std::fixed 来获得:

int main() {
    float y = 0.000137*0.000137;
    std::cout << std::fixed << std::setprecision(12) << y << "\n";
}

结果:

0.000000018769

【讨论】:

    【解决方案2】:

    它总是相等的,并且这些数字是相等的

    如果您使用 cout 打印,请查看有关 cout 格式化页面的参考资料

    http://www.cplusplus.com/reference/ios/fixed/

    【讨论】:

    • 1.887886282e-8 以何种方式“等效”于 0.000000018769?
    • 哦,抱歉,我只是将指数表示法视为差异,这可能是浮点限制错误,因为您的常量是双精度数,然后它们被转换为浮点数
    • float 中的五个有效数字非常精确。
    猜你喜欢
    • 1970-01-01
    • 2010-12-09
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多