将Double转换为NSString以获取标签文本

时间:2014-05-26 12:04:19

标签: ios objective-c nsstring double nsnumber

我试图从NSNumber中获取NSMutableArray之前被double作为NSString进行操作,然后添加到数组中以打印出来标签(double)。

重要的是,该数字仍然是双精确表示,没有科学记数来缩写答案。

另一个要求是打印到15或16位小数,舍入是可选的但不是必需的。

我也不希望在显示1+1=2.

时追踪0

我已经尝试了以下但这些不起作用......

这没关系,但用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}}这样做的任何代码示例。

2 个答案:

答案 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)。