Подтвердить что ты не робот

IOS - Отображение валюты без центов с использованием NSNumberFormatter

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

4b9b3361

Ответ 1

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

float myValue = 543.32;

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 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

Swift 3:

currencyFormatter.maximumFractionDigits = 0