代码之家  ›  专栏  ›  技术社区  ›  CristiC jason.zissman

这个字符串格式有什么问题(模拟器和设备上的行为不同)?

  •  3
  • CristiC jason.zissman  · 技术社区  · 14 年前

    我在按下一个数字时执行了这段代码:

        NSString *currentValue = [@"" stringByAppendingFormat:@"%.02f", [[[[[textField text] stringByReplacingOccurrencesOfString:@"." withString:@""] stringByReplacingOccurrencesOfString:@"," withString:@""] stringByReplacingOccurrencesOfString:@" " withString:@""] doubleValue]/100.0f];
                //I am using this to obtain always a number with 2 decimals.
    
        NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
        [f setNumberStyle:NSNumberFormatterDecimalStyle];
        [f setMinimumFractionDigits:2];
        [f setMaximumFractionDigits:2];
        [f setGroupingSeparator:@" "];
    
        NSNumber *currentNumberValue = [f numberFromString:currentValue];
        NSLog(@"1: %@", currentValue);
        NSLog(@"2: %@", [currentNumberValue stringValue]);
    

    现在,如果我在模拟器中运行它并按3,我会得到以下结果:

    1: 0.03
    2: 0.03
    

    如果我在设备上运行它,我有:

    1: 0.03
    2: 0
    

    所以在设备上,格式化后的数字基本上是0。
    我也注意到在模拟器上 . '作为十进制分隔符,在设备上我有' , '.

    因为这一点,它永远不会进一步发展。我按的数字仍然是0。

    有什么问题吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   MusiGenesis    14 年前

    您的设备显然设置为使用 , 作为十进制分隔符。尝试将此行添加到 alloc init 您的数字格式化程序:

    [f setDecimalSeparator:@"."];
    

    或者使用 setLocale 方法(或更改设备设置为的区域设置)。

        2
  •  0
  •   Daddy    14 年前

    尝试如下:

    NSString *currentValue = [textField text];
    float currentFloat = [currentValue floatValue];
    NSLog(@"%.2f",currentFloat); //string representation of floatValue
    NSLog(@"%@",currentValue); //string currentValue