【问题标题】:Why am I not able to print 32.0 instead of 32 inspite of typeconversion?为什么我无法打印 32.0 而不是 32 尽管类型转换?
【发布时间】:2020-09-17 07:01:58
【问题描述】:

这是我的代码。输入是

5

10 40 30 50 20

1 2 3 4 5

我试图找到一个大小为 n 的数组的加权平均值,向量 a 将 n 个元素及其对应的权重保存在向量 b 中。我无法理解为什么打印出 32 而不是 32.0?谁能告诉我为什么以及如何改变它?

int main() {
    int n;
    cin>>n;
    vector<int> a(n),b(n);
    for(int i=0;i<n;i++){
        cin>> a[i] ;
    }
    for(int i=0;i<n;i++){
        cin>> b[i] ;
    }
    double s=0,w=0;
    for(int i=0;i<n;i++){
        s+=b[i]*a[i];
        w+=b[i];
    }
    cout<<s/w*1.0;

    return 0;
}

【问题讨论】:

    标签: c++ syntax statistics type-conversion weighted-average


    【解决方案1】:

    是否打印3232.0 是输出格式的主题。默认情况下,如果可能,它会剪掉所有不必要的数字(以及小数点)。 (*1.0 对此没有帮助。)

    相关功能在&lt;iomanip&gt;:

    例子:

    #include <iomanip>
    #include <iostream>
    
    int main()
    {
      std::cout
        << 32.0 << '\n'
        << std::fixed << std::setprecision(1) << 32.0 << '\n';
    }
    

    输出:

    32
    32.0
    

    Live Demo on coliru

    【讨论】:

      【解决方案2】:

      c++ cout 默认自动删除尾随零。

      如果您想查看它们,您必须使用std::cout &lt;&lt; std::fixed; 查看来自here 的详细信息。

      另外,如果您想设置浮点数的精度,请使用std::cout.precision(N)
      详情请查看here

      我会按如下方式更改您的代码。

      #include <iostream>
      #include <vector>
      using namespace std;
      
      int main() {
          int n;
          cin>>n;
          vector<int> a(n),b(n);
          for(int i=0;i<n;i++){
              cin>> a[i] ;
          }
          for(int i=0;i<n;i++){
              cin>> b[i] ;
          }
          double s=0,w=0;
          for(int i=0;i<n;i++){
              s+=b[i]*a[i];
              w+=b[i];
          }
          // MODIFIED
          cout << fixed;
          cout.precision(1);
          // MODIFIED END
          cout<<s/w*1.0;
      
          return 0;
      }
      

      【讨论】:

        【解决方案3】:

        您想要输出格式,方法是使用setprecisioniomanip 函数,如下所示:

            std::cout << std::fixed; 
            std::cout << std::setprecision(1); //setprecision(n) where n = number of decimal digits
            std::cout <<s/w << '\n';\
        

        【讨论】:

          猜你喜欢
          • 2011-11-09
          • 2016-10-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-29
          相关资源
          最近更新 更多