【问题标题】:Formatting Output格式化输出
【发布时间】:2010-01-29 10:45:12
【问题描述】:

我需要以科学计数法输出数字,这样小数点前总是有一个“0”。

例如对于数字 x = 134.87546,我需要产生输出 0.134875E03 不是 1.348755E02

有人知道怎么做吗?

提前致谢——设拉子。

【问题讨论】:

    标签: c++ formatting scientific-notation


    【解决方案1】:
    int exp = (int)log10(input)+1;
    double shifted = input / pow(10.0, exp);
    printf("%fE%d", shifted, exp);
    

    【讨论】:

      【解决方案2】:
      int exponent = floor(log10(num)) + 1;
      

      然后只打印“0.”,不带小数的数字,“E”,然后是指数。

      【讨论】:

      • log() 是自然对数,在 C 标准库中。你想要log10()
      • 另外,如果输入为10ceil(log10(num)) 将返回1,而0.10 连接为0.10,乘以10^1 为@987654331 @ 不等于 10。你真的想要地板,再加上 1。
      • @Dav,啊,谢谢。我很长时间没有使用 stdmath,所以我只是添加了我的意思是 log10 的评论。另外,我没有考虑 10 的幂是 log10 的整数的情况,你是对的。
      【解决方案3】:

      您可以使用Boost Format library 进行调查,这是一个通用的输出格式库。

      【讨论】:

      • 我相当确定固定/科学操纵器实际上不能导致输出在小数点前始终为零 - 它们是为单个数字的标准表示法设计的(不是零)小数点前。
      • @Dav Ooops... 我认为这就是操纵者的行为方式。从我的回答中删除(并投票赞成您的评论;)