..所以“.”后面只有 3 位数字..
float a = 0.9876543
由于通过蓝牙传输数字,我希望仅在内存中有 0.987 ..
我正在使用 iphone SDK ..
谢谢你... :)
..所以“.”后面只有 3 位数字..
float a = 0.9876543
由于通过蓝牙传输数字,我希望仅在内存中有 0.987 ..
我正在使用 iphone SDK ..
谢谢你... :)
无论您是存储像 1.0 这样的“简单”数字还是像 1.23456789 这样的“复杂”数字,单精度浮点数都占用相同的存储量。(对于双精度浮点数也是如此——它们的大小都相同,尽管显然它们比单精度浮点数占用更多的存储空间。)
任何网络协议/传输(例如蓝牙)都涉及使事情正常工作的开销,例如标头等。这些开销意味着您想要节省的存储量可能不值得打扰-您正在谈论从通信中减少几个字节,这可能比你的潜在节省大几个倍。
更现实的优化可能是收集一些读数,然后一次全部传输,例如一次 32 个。这使您的“真实信息”与“协议开销”的比率更高。
以下是您应该注意的一些关于优化的建议:
http://c2.com/cgi/wiki?PrematureOptimization
不要太早优化!
你有三个答案:
苹果的方式:
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];
祝你好运
你想打印号码吗?无论如何,我不确定这是否是你要找的:
float a = 0.9876543;
NSNumber *number = [NSNumber numberWithFloat: a];
NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setMaximumFractionDigits:3];
NSLog(@"%@", [formatter stringFromNumber: number]);