2015-05-07 1 views
2

Когда я конвертировать NSString в Float ДО 2 знаков после запятой, он будет автоматически принимать 6 Precisions после точки. Я хочу только 2 после запятой после запятой. По мне, в Objective-C, когда мы создаем Float, он назначит память для хранения чисел с плавающей запятой, скажем 8 байтов.Как преобразовать nsstring в float до 2 десятичных знаков в объективе C?

Так что, если я назначен 12.15 к Float переменной в чем, он будет хранить 12.14999998 в этой ячейке памяти, и когда я принести, что число с плавающей запятой, он будет получать этот номер из этого места и дать его мне.

+1

Обновите свой вопрос соответствующим кодом, чтобы мы могли видеть, что вы делаете. – rmaddy

+0

@ KirtiParghi - проблема, которую вы решаете или нет. если да, то принимайте ответ, который вам действительно поможет. если не решить, тогда ответ попытается вам помочь. –

ответ

-1

Попробуйте сначала преобразовать NSString в float, а затем дать% 0.2f получить плавающее значение до 2 десятичных знаков.

Пример кода:

NSString *string = @"3.45"; 
float floatValue = [string floatValue]; 
NSLog(@"%0.2f",floatValue); 
0
float num = 12.34555; 
NSString * str = [NSString stringWithFormat:@"%.2f",num]; 
NSLog(@"sr %@",str); 
1

Там нет никакого способа хранить поплавок/двойной с точным числом десятичной, ни точное значение: что из-за внутреннего представления такого значения, в двоичном формате.

Если вы хотите получить такое точное значение, вам необходимо будет использовать класс NSDecimalNumber.

Вы инициализировать ваш номер:

NSDecimalNumber *myNumber = [NSDecimalNumber decimalNumberWithString:@"12.87"]; 

И потом, вы можете сделать математику на них с помощью методов:

- (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber 
- (NSDecimalNumber *)decimalNumberBySubstracting:(NSDecimalNumber *)decimalNumber 
- (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber 
- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber 

и так далее ...

NSDecimalNumber decimalNumberSum = [decimalNumberA decimalNumberByAdding:decimalNumberA]; 
1
myFloat = round(myFloat*100)/100.0; 

это избавит вас от лишних десятичных знаков после e вторая позиция

Смежные вопросы