iOS - Отображение валюты без центов с использованием NSNumberFormatter - PullRequest
14 голосов
/ 08 марта 2012

Я могу конвертировать конкретный номер NSNumber в валюту, используя NSNUmberFormatter. Его символический символ $, числа, разделенные "," и т. Д.
Но я не хочу показывать центы.
Например, его отображение $ 537,33,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 или сделать что-то, чтобы результат не имел "десятичных дробей"

Ответы [ 7 ]

42 голосов
/ 23 июля 2012

Используйте параметр MaximumFractionDigits:

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

Вы можете соответствующим образом настроить значение.Использование 2 ограничит результат двумя цифрами, для этого вопроса значение 0 должно сделать это.

6 голосов
/ 21 декабря 2017

Вот решение в 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 не будет отображать никаких десятичных или дробных значений.

0 голосов
/ 05 июня 2019
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)
0 голосов
/ 25 сентября 2017
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;

        }
0 голосов
/ 14 июля 2017

Свифт 3:

currencyFormatter.maximumFractionDigits = 0
0 голосов
/ 21 июля 2014

Когда вы перейдете к отображению, просто сделайте это

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

Это работает, только если переменная mynumberwithcents является либо Float, либо Double ...

0 голосов
/ 08 марта 2012

Перед добавлением числа в форматтер измените его на int, чтобы избежать десятичных дробей, например:

float myValue = 543.32;

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

Вы избавитесь от десятичной части!

...