我有一个类似于这个问题的问题:How to obtain an unformatted string representation of an NSDecimal or NSDecimalNumber?我需要一个字符串格式的数字准确表示为NSNumber,但是这个数字在其他地方被转换回字符串,而我无法避免。我遇到的问题是,当数字转换回字符串时,字符串在某些情况下是科学记数法。
NSDecimalNumber *dn = [NSDecimalNumber decimalNumberWithString:@"0.0001"];
NSString *s = [dn stringValue]; // s will be @"1E-4"
如何防止以科学记数法显示此数字?
我正在使用大约2005版本的GNUstep(可能是针对GNUstep Base的v1.11.1),而不是在mac或iPhone上,这可能是行为与我引用的其他问题之间的一些差异。我查看了base library API和我自己的GNUstep安装中的文档,但我似乎无法找到任何帮助。
编辑2/7/12:
问题略有改变,但目标仍然相同。最初,我不认为我能够控制字符串输出片段,但我可以将值作为字符串传回。此时我正在尝试使用格式化字符串,但我仍然希望阻止出现科学记数法。
[NSString stringWithFormat:@"%1.14g", [val doubleValue]]
我选择使用%g
,因为我们希望该值具有特定数量的有效数字。如果我使用%f
,我可以修剪额外的零,但数字并不总是干净利落。例如,800000000.79显示为800000000.7899999600。
有没有办法获得格式正确的数字,最多有一定数量的有效数字(或小数位)没有在该数字位数之前显示科学记数法?
我也愿意接受C的建议。
答案 0 :(得分:2)
您应该查看NSNumberFormatter
// Create formatter
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; // adjust this
NSString *formattedOutput = [formatter stringFromNumber:yourDecimalNumber];
答案 1 :(得分:1)
如何获取C值(double,int,long等),然后将其格式化为C字符串,或NSString
格式为stringWithFormat:
?
答案 2 :(得分:0)
尝试使用NSNumberFormatter而不是stringValue方法打印数字。它有很多选择。
(我假设NSUumberFormatter在GNUstep上可用)
答案 3 :(得分:0)
使用以下方法避免科学指数表示法。
将Double转换为String
func getStringFrom(double doubleVal: Double) -> String
{
var stringValue : String = "0.00"
let formatter = NSNumberFormatter()
formatter.usesSignificantDigits = true;
formatter.maximumSignificantDigits = 100
formatter.groupingSeparator = "";
formatter.numberStyle = .DecimalStyle
stringValue = formatter.stringFromNumber(doubleVal)!;
return stringValue
}
将字符串转换为Double
func getDoubleFrom(textField textField: UITextField) -> Double
{
var doubleValue : Double = 0.0
if let val = textField.text
{
let numberFormatter = NSNumberFormatter()
numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
let finalNumber = numberFormatter.numberFromString(val)
doubleValue = (finalNumber?.doubleValue)!;
}
return doubleValue
}