Ответ 1
Прежде чем добавлять номер в форматтер, измените его на int, чтобы избежать десятичных знаков, примерно так:
float myValue = 543.32;
NSNumber myNumber = [NSNumber numberWithInt: (int)myValue)];
Вы избавитесь от десятичной части!
Я могу преобразовать определенный 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 или сделать что-то, чтобы результат не имел "десятичных знаков"
Прежде чем добавлять номер в форматтер, измените его на int, чтобы избежать десятичных знаков, примерно так:
float myValue = 543.32;
NSNumber myNumber = [NSNumber numberWithInt: (int)myValue)];
Вы избавитесь от десятичной части!
Используйте параметр maximumFractionDigits:
NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[currencyFormatter setMaximumFractionDigits:2];
Вы можете отрегулировать значение соответствующим образом. Использование 2 ограничивает результат двумя цифрами, для этого вопроса должно быть значение 0.
Вот решение в 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
не будет показывать десятичные или дробные значения.
Когда вы выходите на экран, просто сделайте это
Mylabel.text = @"%.2f", mynumberwithcents;
Это работает только в том случае, если переменная mynumberwithcents
представляет собой либо Float, либо Double...
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;
}
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)
Swift 3:
currencyFormatter.maximumFractionDigits = 0