【问题标题】:Round to nearest ten using printf使用 printf 四舍五入到最接近的十
【发布时间】:2013-06-28 18:01:31
【问题描述】:

printf 的浮点值的精度说明符允许程序员指定小数位后打印的位数。 printf 是否有类似的精度说明符,允许程序员指定小数点之前有多少位数来舍入该值?

例如,如果我将157 传递给printf,如果我告诉它四舍五入到最近的十位,我希望将值160 打印到屏幕上。。 p>

【问题讨论】:

    标签: c printf c99


    【解决方案1】:

    据我所知,没有办法让printf 做到这一点。在将其传递给printf 之前,您必须手动舍入该值。例如:

    printf("%d\n", myRound(157, 10));
    
    int myRound(int x, int b) {
        return ((x + b/2) / b) * b;  // TODO: handling for overflow, etc.
    }
    

    【讨论】:

      【解决方案2】:

      printf 不会改变数据,格式说明符只指定它的显示方式。如果你给printf157,它会以某种形式打印157

      查看 C math library 中的舍入函数以了解舍入函数。

      【讨论】:

        【解决方案3】:

        没有。与printf 最接近的可能是使用科学记数法:

        printf("%.1e\n", 157.0);
        

        这将打印1.6e+02,这绝对不是你想要的。

        【讨论】:

          【解决方案4】:

          我喜欢myRound(157, 10) 解决方案,但我想我会补充:

          printf("%d0\n", (n+5)/10);   // int n;
          printf("%.0f0\n", x/10);     // double x; (fails for INF, NAN)
          

          【讨论】:

            猜你喜欢
            • 2011-11-06
            • 1970-01-01
            • 2017-05-22
            • 2014-12-14
            • 1970-01-01
            • 2017-02-11
            • 1970-01-01
            • 2016-07-22
            相关资源
            最近更新 更多