所以“跛脚” - 如何从浮动= 0.39824702只浮动= 0.398?

时间:2011-03-09 14:26:40

标签: iphone ios objective-c-2.0

..所以只有3位数字“。”..

float a = 0.9876543

我想在内存中只有0.987,因为通过蓝牙传输号码。

我正在使用iphone SDK ..

谢谢你...... :)

3 个答案:

答案 0 :(得分:6)

单个精度浮点数会占用相同数量的存储空间,无论您存储的是“简单”数字(如1.0)还是“复杂”数字(如1.23456789)。 (同样,对于双精度浮子 - 它们的尺寸彼此相同,但显然它们比单精度浮子占用更多的存储空间。)

任何网络协议/传输这样的蓝牙都会产生开销,只是让事情变得有效,例如标题等。这些开销意味着你想要节省的存储空间可能只是不值得打扰 - 你'再谈谈削减通信的几个字节,这可能比你潜在的保存还要好几倍。

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

以下是您应该了解的有关优化的一些建议:

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

不要太早优化!

答案 1 :(得分: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];
祝你好运

答案 2 :(得分:0)

您是否正在尝试打印该号码?无论如何,我不确定这是不是你想要的:

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

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