0

..所以“.”后面只有 3 位数字..

float a = 0.9876543

由于通过蓝牙传输数字,我希望仅在内存中有 0.987 ..

我正在使用 iphone SDK ..

谢谢你... :)

4

3 回答 3

6

无论您是存储像 1.0 这样的“简单”数字还是像 1.23456789 这样的“复杂”数字,单精度浮点数都占用相同的存储量。(对于双精度浮点数也是如此——它们的大小都相同,尽管显然它们比单精度浮点数占用更多的存储空间。)

任何网络协议/传输(例如蓝牙)都涉及使事情正常工作的开销,例如标头等。这些开销意味着您想要节省的存储量可能不值得打扰-您正在谈论从通信中减少几个字节,这可能比你的潜在节省大几个倍。

更现实的优化可能是收集一些读数,然后一次全部传输,例如一次 32 个。这使您的“真实信息”与“协议开销”的比率更高。

以下是您应该注意的一些关于优化的建议:

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

不要太早优化!

于 2011-03-09T16:49:17.190 回答
1

你有三个答案:

苹果的方式:

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];

祝你好运

于 2011-03-09T16:57:39.507 回答
0

你想打印号码吗?无论如何,我不确定这是否是你要找的:

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

NSLog(@"%@", [formatter stringFromNumber: number]);
于 2011-03-09T14:56:18.020 回答