так что "хромает" - как получить от float = 0.39824702 просто float = 0.398? - PullRequest
0 голосов
/ 09 марта 2011

.. поэтому только 3-значные цифры после "." ..

float a = 0.9876543

Хотелось бы, чтобы 0,987 было только в памяти из-за передачи числа по Bluetooth ..

Я использую iphone SDK ..

спасибо ...:)

Ответы [ 3 ]

6 голосов
/ 09 марта 2011

Число с плавающей запятой одинарной точности занимает одинаковый объем памяти, независимо от того, храните ли вы «простое» число, например, 1,0, или «сложное», например, 1,23456789.(Аналогично для операций с плавающей запятой двойной точности - все они имеют одинаковый размер, хотя, очевидно, они занимают больше места для хранения, чем операции с плавающей запятой одинарной точности.)

Любой сетевой протокол / транспорт, такой как Bluetooth, включает в себя только издержкизаставить вещи работать, такие как заголовки и т. д. Эти издержки означают, что объем памяти, который вы хотите сэкономить, вероятно, не стоит беспокоиться - вы говорите о сокращении нескольких байтов из сообщения, что, вероятно, немалоВ любом случае это значение будет больше, чем ваша потенциальная экономия.

Более реалистичная оптимизация может состоять в том, чтобы собрать некоторые показания и затем передать их все сразу, например 32 сразу.Это повышает отношение «реальной информации» к «издержкам протокола».

Вот несколько советов по оптимизации, о которых вам следует знать:

http://c2.com/cgi/wiki?PrematureOptimization

Неоптимизировать слишком рано!

1 голос
/ 09 марта 2011

У вас есть три ответа:

Путь яблока:

float a = 0.9876543;
NSNumber *number = [NSNumber numberWithFloat: a];
NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setMaximumFractionDigits:3];

NSLog(@"%@", [formatter stringFromNumber: number]);
[formatter release], formatter = nil;

Путь к ботанику C:

float a = 0.9876543;
a = roundf(a*1000)*.001f; // or floatf() if you want truncate and not round number

трюк с яблоком:

float a = 0.9876543;
NSString* tmp = [NSString stringWithFormat:@"%.3f",a];
a = [tmp floatValue];

Удачи

0 голосов
/ 09 марта 2011

Вы пытаетесь напечатать номер?Во всяком случае, я не уверен, что это то, что вы ищете:

float a = 0.9876543;
NSNumber *number = [NSNumber numberWithFloat: a];
NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setMaximumFractionDigits:3];

NSLog(@"%@", [formatter stringFromNumber: number]);
...