代码之家  ›  专栏  ›  技术社区  ›  Besfort Abazi

将NSString转换为double-Objective-C

  •  0
  • Besfort Abazi  · 技术社区  · 7 年前

    我对将NSString转换为double感到困惑,有时它工作,有时不工作。

    //eg: NSString *string = @"0,50"
    

    (一)

    double d = [string doubleValue];
    // -> d is 0.00
    

    (二)

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    
    [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [formatter setMaximumFractionDigits:2];
    [formatter setMinimumFractionDigits:2];
    NSNumber *num = [formatter numberFromString:string];
    double d = [num doubleValue];
    // -> d is <null>
    

    我还能试什么? 为什么有时候会有用?

    提前谢谢你!

    2 回复  |  直到 7 年前
        1
  •  3
  •   Jean-Baptiste Yunès    7 年前

    NSNumberFormatterDecimalStyle , (逗号)用于分隔数字组(千、百万等),而不是小数点。这更多的是一个地点问题。使用其为标准小数点的区域设置。

    语言环境是给定环境的语言设置,用于以字符串(或相反)形式表示许多值。所以尝试使用 作为小数点(例如 fr NSNumberFormatter 拥有一个名为 locale 修改转换策略。

        2
  •  2
  •   Ashley Mills    7 年前

    , .

    这个例子很快,但想法是一样的

    let formatter = NumberFormatter()
    let string1 = "1.3"
    formatter.locale = Locale(identifier: "en_GB")
    formatter.number(from: string1)
    // returns 1.3 (as UK uses '.' for decimal)
    
    let string2 = "1,3"
    formatter.number(from: string2)
    // returns nil (as formatter doesn't recognise the ','
    
    formatter.locale = Locale(identifier: "fr_FR")
    formatter.number(from: string2)
    // returns 1.3 (as France uses '.' for decimal)
    

    或者,您可以设置 decimalSeparator

    formatter.decimalSeparator = ","
    
    推荐文章