【问题标题】:Round double in Objective-CObjective-C 中的圆形双精度
【发布时间】:2020-11-02 23:43:03
【问题描述】:

我想在 Objective-C 中将双精度位四舍五入到小数点后一位。

在 Swift 中,我可以通过扩展来做到这一点:

public extension Double {
    /// Rounds the double to decimal places value
    func rounded(toPlaces places:Int) -> Double {
        let divisor = pow(10.0, Double(places))
        return (self * divisor).rounded() / divisor
    }
}

但是,显然你不能从 Objective-C 调用原语的扩展,所以我不能使用扩展。

我很乐意直接对双精度或作为字符串进行舍入,但是,以下都不起作用:

 double mydub = 122.12022222223322;
 NSString *axtstr = [NSString stringWithFormat:@"%2f", mydub]; //gives 122.120222

 double rounded = (round(mydub*10)) / 10.0; //gives 122.100000

如何转换 122.12022222223322;进入 122.1?

【问题讨论】:

    标签: objective-c swift double rounding


    【解决方案1】:

    您需要在%2f 之间加上一个小数

    [NSString stringWithFormat:@"%.2f", mydub];

    【讨论】:

      【解决方案2】:
      double mydouble = 122.12022222223322;
      NSString *str = [NSString stringWithFormat:@"%.2f", mydouble];
      // = @"122.12"
      

      .. 不会舍入 mydouble。相反,它只会将格式作为字符串应用于输出。

      double d = 122.49062222223322;
      NSString *dStr = [NSString stringWithFormat:@"%.f %.1f %.2f %.3f", d, d, d, d];
      // = @"122 122.5 122.49 122.491"
      

      由于 Objective-C 与 C 共享语言规则,因此您可以安全地进行舍入

      #include <math.h>
      
      double rounded = round(mydouble);
      // = 122.000000
      

      当然,你可以用你想要的乘法和除以十的幂来移动逗号。

      double commashifted = round(mydouble*100.0)/100.0;
      // = 122.120000;
      

      如果您真的喜欢 Objective-C 类并在豪华版中做同样的事情,请查看 Foundation Framework 中的 'NSDecimal.h'

      最后但并非最不重要的一点是,您可以像使用 swift 一样使用 C。

      double roundbycomma(int commata, double zahl) {
          double divisor = pow(10.0, commata);
          return round(zahl * divisor) / divisor;
      }
      

      【讨论】:

      • 感谢这个出色而彻底的回答。我使用了@clawesome 建议的 %.2f 方法,因此我将其标记为正确,但是,您的回答涉及很多有价值的细节,因此我也对其表示赞同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 2011-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多