【问题标题】:Round double value to 2 decimal places将 double 值舍入到小数点后 2 位
【发布时间】:2011-02-13 17:47:13
【问题描述】:

我有一个双精度值 22.368511 我想将其四舍五入到小数点后 2 位。即它应该返回 22.37

我该怎么做?

【问题讨论】:

  • 您要返回小数点后 2 位的值吗?还是以 2 位小数显示值?
  • 其实我只要展示一下就可以了

标签: iphone objective-c cocoa-touch


【解决方案1】:

与大多数语言一样,格式为

%.2f

你可以看到更多例子here


编辑:如果您担心 25.00 时点的显示,我也知道了

{
    NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
    [fmt setPositiveFormat:@"0.##"];
    NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);
    NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.3]]);
    NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.0]]);
}
2010-08-22 15:04:10.614 a.out[6954:903] 25.34
2010-08-22 15:04:10.616 a.out[6954:903] 25.3
2010-08-22 15:04:10.617 a.out[6954:903] 25

【讨论】:

  • 在 iOS 上,我必须使用 setPositiveFormat:,因为 setFormat: 方法不存在(仅针对 Mac 定义),但仍然 - 很好的答案,为我节省了数小时的实验时间,所以 +1 和非常感谢你:)
  • 一个问题:不是舍入,而是截断。据推测,使用提问者在您的代码中提供的输入值,结果不会是他所期望的(22.37)——而是(22.36)。
  • 但是你不能用它做进一步的计算
【解决方案2】:

您可以使用以下代码将其格式化为两位小数

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];

[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2];
[formatter setRoundingMode: NSNumberFormatterRoundUp];

NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:22.368511]];

NSLog(@"Result...%@",numberString);//Result 22.37

斯威夫特 4:

let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.roundingMode = .up

let str = String(describing: formatter.string(from: 12.2345)!)

print(str)

【讨论】:

  • 在 swift 4 中:让 str = String(描述:formatter.string(from: 12.2345)!)
  • 22.36 的结果值是否可以不从 6 增加到 7?
  • @ShahbazAkram 是的。 roundingMode 还有许多其他选项,例如 NSNumberFormatterRoundDown、NSNumberFormatterRoundHalfDown 等。
【解决方案3】:
 value = (round(value*100)) / 100.0;

【讨论】:

  • 我相信这是最正确的答案——他要求将其四舍五入——不要在最后将其转换为字符串(或在之后进行双重转换回双精度)。
【解决方案4】:
[label setText:@"Value: %.2f", myNumber];

【讨论】:

    【解决方案5】:

    在 Swift 2.0 和 Xcode 7.2 中:

    let pi:Double = 3.14159265358979
    String(format:"%.2f", pi)
    

    例子:

    【讨论】:

      【解决方案6】:

      你可以使用NSDecimalRound函数

      【讨论】:

      • 如果您将值四舍五入,这很有用,(我起初也认为这是问题)但是 cmets 显示 hmthur wats 仅控制显示...
      【解决方案7】:

      要从双精度中删除小数,请查看此输出

      对象 C

      double hellodouble = 10.025;
      NSLog(@"Your value with 2 decimals: %.2f", hellodouble);
      NSLog(@"Your value with no decimals: %.0f", hellodouble);
      

      输出将是:

      10.02 
      10
      

      Swift 2.1 和 Xcode 7.2.1

      let hellodouble:Double = 3.14159265358979
      print(String(format:"Your value with 2 decimals: %.2f", hellodouble))
      print(String(format:"Your value with no decimals: %.0f", hellodouble))
      

      输出将是:

      3.14 
      3
      

      【讨论】:

        【解决方案8】:

        我打算接受 Jason 的回答,但我注意到在我的 Xcode 版本(4.3.3)中我不能这样做。因此,经过一番研究,我发现他们最近更改了类方法并删除了所有旧方法。所以我必须这样做:

        NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
        
        [fmt setMaximumFractionDigits:2];
        NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);
        

        【讨论】:

          【解决方案9】:

          使用 NSNumber *aNumber = [NSNumber numberWithDouble:number];而不是 NSNumber *aNumber = [NSNumber numberWithFloat:number];

          +(NSString *)roundToNearestValue:(double)number
          {
              NSNumber *aNumber = [NSNumber numberWithDouble:number];
          
              NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
              [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
              [numberFormatter setUsesGroupingSeparator:NO];
              [numberFormatter setMaximumFractionDigits:2];
              [numberFormatter setMinimumFractionDigits:0];
              NSString *string = [numberFormatter stringFromNumber:aNumber];        
              return string;
          }
          

          【讨论】:

            【解决方案10】:

            对于 Swift,如果您不能导入 Foundation、使用 round() 和/或不想要字符串(通常是在 Playground 中的情况),则有一个简单的解决方案:

            var number = 31.726354765
            var intNumber = Int(number * 1000.0)
            var roundedNumber = Double(intNumber) / 1000.0
            

            结果:31.726

            【讨论】:

              【解决方案11】:

              我使用Umberto Raimondi扩展类型Double发布的解决方案:

              extension Double {
                  func roundTo(places:Int) -> Double {
                      let divisor = pow(10.0, Double(places))
                      return (self * divisor).rounded() / divisor
                  }
              }
              

              【讨论】:

                【解决方案12】:

                你可以这样做:

                NSNumberFormatter* f = [[NSNumberFormatter alloc] init];
                [f setNumberStyle:NSNumberFormatterDecimalStyle];
                [f setFormat:@0.00"];
                
                // test
                NSNumber* a = @12;
                NSString* s = [f stringFromNumber:a];
                NSLog(@"%@", s);
                

                【讨论】:

                  猜你喜欢
                  • 2011-02-18
                  • 1970-01-01
                  • 2013-08-14
                  • 2014-11-16
                  • 2018-01-17
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多