【问题标题】:NsNumberFormatter not giving correct resultNsNumberFormatter 没有给出正确的结果
【发布时间】:2013-03-06 18:47:02
【问题描述】:

我遇到了一个问题,但似乎找不到解决方案。我有一个用户正在输入数字的文本字段。问题是当用户在小数点后输入最后一个数字为零时,它不会占用例如- 42.70 打印为 42.7。找到下面的代码

  NSNumberFormatter *_numberFormatter =[NSNumberFormatter new];
     _numberFormatter.maximumFractionDigits=2;
    _numberFormatter.minimumIntegerDigits=1;
    _numberFormatter.roundingMode=kCFNumberFormatterRoundCeiling;
    _numberFormatter.allowsFloats=YES;
    _numberFormatter.groupingSeparator=@",";
    _numberFormatter.usesGroupingSeparator=YES;
    _numberFormatter.groupingSize=3;
   _numberFormatter.minimum=[NSNumber numberWithInt:0];
    [_numberFormatter setLenient:YES];
    [_numberFormatter setUsesSignificantDigits:NO];

NSNumber *number = [nf numberFromString:combinedString];
    NSString *formattedString = [nf stringFromNumber:number];

格式化的字符串正在打印输入的值,如果在最后一个位置输入 sans 0,但如果有任何其他数字,它会打印正确的数字,例如 42.78 原样打印,但 43.70 打印为 43.7。

我是否缺少设置一些参数。需要任何帮助

提前致谢

【问题讨论】:

    标签: ios objective-c nsnumberformatter


    【解决方案1】:

    同时设置

    _numberFormatter.maximumFractionDigits = 2;
    _numberFormatter.minimumFractionDigits = 2;
    

    如果您总是想在小数点分隔符后打印两位数。

    【讨论】:

    • 我试过这样做,但是即使用户在文本框中输入 4,它也会返回为 4.00,他将无法继续输入。所以不能这样做。
    • @dead_soldier,尝试使用两种格式化程序,一种用于输入,一种用于输出
    • @dead_soldier:你在用户输入时替换文本域中的文本吗?
    • @MartinR 我在 shouldChangeCharactersInRange 方法中进行格式化。所以用户看到他在输入什么。
    • @dead_soldier:那你到底想要什么?当用户键入“4.2”时,您是想将其替换为“4.20”还是保持原样?
    【解决方案2】:

    你可以用这个:

    NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
    [fmt setPositiveFormat:@"0.##"];
    NSNumber *n = [NSNumber numberWithFloat:47.78];
    NSLog(@"%@", [fmt stringFromNumber:n]);
    

    它将打印 47.78

    【讨论】:

    • 即使现在它也能正确打印小数点后的数字,但问题是当用户在末尾键入 0 时,如 12.50。它不是返回 12.50 而是 12.5。我知道它是相同的,但它是需要向用户显示为 12.50
    【解决方案3】:

    发现我们必须进行操作才能从我们这边添加一个零。iOS 以一种奇怪的方式工作并且不允许它。所以下面是我的代码。希望它对其他人也有帮助。

    NSArray *formatArr = [combinedString componentsSeparatedByString:@"."];
        NSString *str = [formatArr lastObject];
        NSString *code;
        if ([str length] >0) {
            code = [[formatArr lastObject] substringFromIndex: [str length] - 1];
            if ([str isEqualToString:@"00"])
            {
    
            }
            else
            {
                if ([combinedString hasSuffix:@".0"])
                {
                    formattedString=[formattedString stringByAppendingString:@".0"];
                }
                else if ([code isEqualToString:@"0"]) {
                    formattedString = [formattedString stringByAppendingString:@"0"];
                }
            }
        }
        else
        {
            if ([combinedString hasSuffix:@".0"])
            {
                formattedString=[formattedString stringByAppendingString:@".0"];
            }
        }
    

    Combinedstring 是用户正在输入的输入。我正在检查 '.'放置并检查最后一个数字是否为零。如果是,则添加我自己的零。现在用户在键入时可以看到 43.50 而不是 43.5

    【讨论】:

      猜你喜欢
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-01
      • 2015-11-12
      • 2012-08-30
      • 2016-04-15
      相关资源
      最近更新 更多