【问题标题】:Finding the scientific notation (E+XX)查找科学记数法 (E+XX)
【发布时间】:2013-10-10 08:12:03
【问题描述】:

我正在尝试使用 double 查找科学记数法,但找不到任何功能或方法。

我的变量是double,我需要从中获取科学记数法,例如:

3.44828e+026

我需要以某种方式从我的双变量中获取数字 026

顺便说一句,这个数字实际上是 28 长而不是 26,有没有办法解决这个问题? (结果不加 2)

提前致谢!

【问题讨论】:

  • 您正在寻找对数...
  • 如果显示错误的指数,您必须在打印前将数字除以 100。计算机通常不会像这样简单的算术错误。
  • 其实我不是除以100。
  • @zakinster 1e+28 - 1 在大多数机器上是 1e28。 (机器浮点值不是实数,不遵守实数运算规则。)
  • @JamesKanze 好点,但在那些机器上,1e+28 == 9.99e+27,无论如何这不会改变结果,1e+28 / 29 = 3.xx e+26

标签: c++ double scientific-notation


【解决方案1】:

如果y 是非负数,这应该可以工作。对于负数y,如果相差一,则结果。如果需要,请自行修复。

#include <iostream>
#include <cmath>

int main()
{
    double x = 3.44828e+026;
    int y = (int)log10(x);
    std::cout << y << std::endl;  
    return 0;
}

输出:26

【讨论】:

    【解决方案2】:

    答案类似于于浩的答案,但这个似乎也适用于负指数(但我还没有完全测试过):

    #include <iostream>
    #include <cmath>
    
    // pre-condition: x != 0.0
    int exponent(double x) {
        double y = log10(x);
        if (y < 0.0)
            y -= 1.0;
        return static_cast<int>(y);
    
    }
    
    int main() {
        std::cout << exponent(3.44828e+026) << '\n';
        std::cout << exponent(3.44828e-026) << '\n';
    }
    

    输出26-26

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多