2011-03-09 17 views
0

..所以只有3位数字AFER“” ..所以“跛脚” - 如何从浮动= 0.39824702只是浮动= 0.398?

float a = 0.9876543 

我想有0.987只因为传输通过蓝牙数量的内存..

我使用iPhone SDK ..

谢谢...... :)

+3

float是一个固定长度的结构,无论小数点后的位数是多少。由于十进制和二进制数字系统之间的映射,舍入到3dec的地方可能需要比原始数字更多的二进制“位置”。发送4字节/ 32位有什么问题(假设这是IOS上float的大小)?对我来说似乎相当有效。什么是“跛脚”? – spender 2011-03-09 14:31:29

+0

跛脚是像一个非常初学者的问题..(但我不知道,对不起,我的问题),所以你说,发送0.987和通过蓝牙发送0.987654321使用浮点数相同?我不会保存网络的容量?因为我需要通过一种方式发送大约30次/秒的6x2 = 12个浮点数,所以它将处理蓝牙没有问题?比我留下完整的号码发送,谢谢 – vogue 2011-03-09 14:52:12

回答

0

你想要打印数字吗?无论如何,我不知道如果这是你在找什么:

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

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

'NSLog(@“%0.3f”,0.9876543)':) – hoha 2011-03-09 15:37:26

+0

@hoha - +1为简单的方法。 – 2011-03-09 16:54:47

+0

rainkiz - 谢谢你,这是非常方便:)我会显示3位数字(这是足够的),但通过蓝牙发送它(它是相同的长尺寸总是..4位)所以谢谢你! – vogue 2011-03-09 20:22:04

6

单精度浮点数占用无论你存储“简单”号像1.0或“相同的存储量复杂“的数字如1.23456789。 (同样,对于双精度浮点数 - 它们的尺寸都相同,尽管显然它们比单精度浮点数需要更多的存储空间。)

任何网络协议/传输(如蓝牙)都会涉及开销,这些开销意味着你想要保存的存储量可能不值得费心 - 你正在谈论的是从通信中删除几个字节,这可能是好几倍无论如何你的潜在储蓄比

更实际的优化可能是收集一些读数,然后一次全部发送它们,例如, 32一次。这使得你的“真实信息”变为“协议开销”比率更高。

下面是关于优化一些建议,你应该知道的:

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

不要太早优化!

+0

+100为“不要优化太早!” – 2011-03-09 17:02:38

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; 

书呆子Ç方式:

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

好运

+1

技术上真棒和机智都。通常不会在这里得到。 – Fluffhead 2013-05-02 23:22:58