【问题标题】:iOS - Showing currency without cents using NSNumberFormatteriOS - 使用 NSNumberFormatter 显示没有美分的货币
【发布时间】:2012-03-08 09:25:51
【问题描述】:

我可以使用 NSNUmberFormatter 将特定的 NSNumber 转换为货币。它的显示符号 $ ,数字用“,”等分隔。
但我不想显示美分。
例如它显示 $537,335.32
我只想显示 $536,335
我正在编写以下代码:

NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

NSDictionary* tempDict = [self.displayDict objectForKey:kConservative];
conservativeHP.text = [currencyFormatter stringFromNumber:[tempDict objectForKey:kHomePrice]];

我应该如何创建 NSNumberFormatter 或做一些事情以使结果不会有“小数”

【问题讨论】:

    标签: ios nsnumberformatter


    【解决方案1】:

    使用 maximumFractionDigits 设置:

    NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease];
    [currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    [currencyFormatter setMaximumFractionDigits:2];
    

    您可以相应地调整该值。使用 2 会将结果限制为两位数,对于这个问题,应该使用 0 值。

    【讨论】:

    • 除了这个答案,添加 [currencyFormatter setMinimumFractionDigits:0];当等于零时,将为您提供四舍五入的小数。就我而言,我想展示 126,000 美元或 125 万美元。这让我明白了。
    【解决方案2】:

    这是 swift 3

    中的解决方案
        let formatter = NumberFormatter()
        formatter.numberStyle = .currency
        //formatter.locale = NSLocale.current
        formatter.currencySymbol = "" //In case you do not want any currency symbols
        formatter.maximumFractionDigits = 0
    

    maximumFractionDigits 设置为0 将不会显示任何小数或小数值。

    【讨论】:

      【解决方案3】:

      斯威夫特 3:

      currencyFormatter.maximumFractionDigits = 0
      

      【讨论】:

        【解决方案4】:

        当你去展示它时,就这样做

        Mylabel.text = @"%.2f", mynumberwithcents;
        

        这仅在 mynumberwithcents 变量是 Float 或 Double 时才有效...

        【讨论】:

          【解决方案5】:
          In case of using category:
          
              .h
                  #import <Foundation/Foundation.h>
          
                  @interface NSString (Price)
          
                  + (NSString *)updateStringToPriceWithValue:(NSNumber *)value;
          
                  @end
              .m
                  #import "NSString+Price.h"
                  @implementation NSString (Price)
          
                  + (NSString *)updateStringToPriceWithValue:(NSNumber *)value
                  {
                      NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
                      [formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
          
                      NSInteger minimumFractionDigits = [formatter minimumFractionDigits];
                      NSInteger maximumFractionDigits = [formatter maximumFractionDigits];
          
                      NSString *formatted = [formatter stringFromNumber:value];
                      NSLog(@"%@", formatted);
          
                      [formatter setMinimumFractionDigits:minimumFractionDigits];
                      [formatter setMaximumFractionDigits:maximumFractionDigits];
          
          
          
                      return formatted;
          
                  }
          

          【讨论】:

            【解决方案6】:
            extension NumberFormatter {
            
            static func makeDisplayPrice(byCode code: String, price: Int) -> String {
                let currencyFormatter = NumberFormatter.currencyPrice
                currencyFormatter.currencyCode = code
                guard let priceString = currencyFormatter.string(from: NSNumber(integerLiteral: price)) else { return "" }
                return priceString
            }
            
            static var currencyPrice: NumberFormatter {
                let currencyFormatter = NumberFormatter()
                currencyFormatter.usesGroupingSeparator = false
                currencyFormatter.numberStyle = .currency
                currencyFormatter.locale = Locale.current
                currencyFormatter.maximumFractionDigits = 0
                return currencyFormatter
            }
            

            }

            let displayPrice = NumberFormatter.makeDisplayPrice(byCode: currency, price: price)
            

            【讨论】:

              【解决方案7】:

              在将数字添加到格式化程序之前,将其更改为 int 以避免小数,如下所示:

              float myValue = 543.32;
              
              NSNumber myNumber = [NSNumber numberWithInt: (int)myValue)];
              

              你会去掉小数部分!

              【讨论】:

              • 谢谢,如果我正在创建 NSNumber,这是一个很好的解决方案。但问题是我将从服务器获取无法更改的数据。仅在显示期间,我想截断美分。
              • 您不需要更改原始值,只需将数字复制到 int 变量中,我没有看到问题
              • 如果要正确执行,请使用 [numberFormatter setRoundingMode:NSNumberFormatterRoundDown];
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多