我试图从NSNumber
中获取NSMutableArray
之前被double
作为NSString
进行操作,然后添加到数组中以打印出来标签(double
)。
重要的是,该数字仍然是双精确表示,没有科学记数来缩写答案。
另一个要求是打印到15或16位小数,舍入是可选的但不是必需的。
我也不希望在显示1+1=2.
我已经尝试了以下但这些不起作用......
这没关系,但用a结束了数字。 (例如:double test = [[data.argOperands objectAtIndex:0]doubleValue];
label.text = [NSString stringWithFormat:@"%3.2f", test];
label.text = [label.text stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:[NSString stringWithFormat:@"0"]]];
)
inf
然后我尝试这样的事情,这是错误的,因为如果我做9 ^ 99它会打印 float y = [[calcData.argOperands objectAtIndex:0]doubleValue];;
label.text = [NSString stringWithFormat:@"%g", y];
或0.0003 / 4它会给出科学数字而不是值
double y = [[data.argOperands objectAtIndex:0]doubleValue];
label.text = [NSString stringWithFormat:@"%f", y];
如果我使用双倍关闭它来执行以下操作,则9 ^ 99有效,但3.33 / 5会返回0.666000并且尾随0&#39>
NSNumberFormatter
非常感谢使用NSDecimalNumber
或{{1}}这样做的任何代码示例。
答案 0 :(得分:0)
“%。13f”会给你13个小数位,但这会给你尾随零。
您可能需要创建一个NSNumberFormatter并使用它。
我怀疑你无论如何都不会幸福。二进制浮点不是十进制的精确表示。十进制值.1不是二进制的精确值,如果以13位小数显示,则可能显示为.09999999998。
您还可以查看使用NSDecimalNumber,它将值存储为十进制数字。它比其他数学方法慢,但你可以准确地控制结果。
答案 1 :(得分:0)
在查看http://nshipster.com/nsformatter/和巨型NSNumberFormatter_Class文档之后,我提出了这个代码,可以根据我的要求打印所有内容:
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setUsesSignificantDigits: YES];
numberFormatter.maximumSignificantDigits = 100;
[numberFormatter setGroupingSeparator:@""];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
label.text = [numberFormatter stringFromNumber:stringFromNumber:@(1234.567800000555)];
这实际上会打印1234.56780000056(错过第12个小数位并将其四舍五入到第11个小数位)虽然我对此非常开心。
我仍在清理答案,显然我不需要maximumSignificantDigits = 100
,但通常有大量数据有助于确保我获得所需的所有小数位数
我必须设置setGroupingSeparator:@""
,因为NSNumberFormatterDecimalStyle
会将逗号括在数字中而我不想要它们(例如:而不是获得1,000我想要1000)。