..所以只有3位数字AFER“” ..所以“跛脚” - 如何从浮动= 0.39824702只是浮动= 0.398?
float a = 0.9876543
我想有0.987只因为传输通过蓝牙数量的内存..
我使用iPhone SDK ..
谢谢...... :)
..所以只有3位数字AFER“” ..所以“跛脚” - 如何从浮动= 0.39824702只是浮动= 0.398?
float a = 0.9876543
我想有0.987只因为传输通过蓝牙数量的内存..
我使用iPhone SDK ..
谢谢...... :)
你想要打印数字吗?无论如何,我不知道如果这是你在找什么:
float a = 0.9876543;
NSNumber *number = [NSNumber numberWithFloat: a];
NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setMaximumFractionDigits:3];
NSLog(@"%@", [formatter stringFromNumber: number]);
单精度浮点数占用无论你存储“简单”号像1.0或“相同的存储量复杂“的数字如1.23456789。 (同样,对于双精度浮点数 - 它们的尺寸都相同,尽管显然它们比单精度浮点数需要更多的存储空间。)
任何网络协议/传输(如蓝牙)都会涉及开销,这些开销意味着你想要保存的存储量可能不值得费心 - 你正在谈论的是从通信中删除几个字节,这可能是好几倍无论如何你的潜在储蓄比
更实际的优化可能是收集一些读数,然后一次全部发送它们,例如, 32一次。这使得你的“真实信息”变为“协议开销”比率更高。
下面是关于优化一些建议,你应该知道的:
http://c2.com/cgi/wiki?PrematureOptimization
不要太早优化!
+100为“不要优化太早!” – 2011-03-09 17:02:38
你有三个答案:
苹果方式:
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];
好运
技术上真棒和机智都。通常不会在这里得到。 – Fluffhead 2013-05-02 23:22:58
float是一个固定长度的结构,无论小数点后的位数是多少。由于十进制和二进制数字系统之间的映射,舍入到3dec的地方可能需要比原始数字更多的二进制“位置”。发送4字节/ 32位有什么问题(假设这是IOS上float的大小)?对我来说似乎相当有效。什么是“跛脚”? – spender 2011-03-09 14:31:29
跛脚是像一个非常初学者的问题..(但我不知道,对不起,我的问题),所以你说,发送0.987和通过蓝牙发送0.987654321使用浮点数相同?我不会保存网络的容量?因为我需要通过一种方式发送大约30次/秒的6x2 = 12个浮点数,所以它将处理蓝牙没有问题?比我留下完整的号码发送,谢谢 – vogue 2011-03-09 14:52:12