【问题标题】:Objective-C: Separate number right/left of decimalObjective-C:小数点左右分开数字
【发布时间】:2014-11-17 01:53:00
【问题描述】:

我正在尝试将左右数字与浮点数分开,以便将每个数字转换为字符串。所以比如5.11,我需要能够把5变成一个字符串,把11变成另一个字符串。

// from float: 5.11
NSString * leftNumber  = @"5";
NSString * rightNumber = @"11";

由此,我可以将 5.11 变成 5' 11"

【问题讨论】:

  • 您当然知道,小数部分不会“映射”到英尺/英寸,而是(对于 2 位数字)英尺和百分之一。即使该值一开始是有效的英尺/英寸,如果您不小心,将其读取为浮点数然后“重构”它可能会导致舍入错误。
  • 我知道十进制数不会映射到身高测量值,谢谢。
  • 你了解舍入问题吗?

标签: objective-c nsnumberformatter cgfloat


【解决方案1】:

一种方式:

  1. 使用stringWithFormat 转换为字符串“5.11”。
  2. 使用componentsSeparatedByString 分隔成“5”和“11”的数组。
  3. stringWithFormat结合。

【讨论】:

    【解决方案2】:

    您可以为此使用 NSString stringWithFormat 和数学函数:

    float n = 5.11;
    NSString * leftNumber  = [NSString stringWithFormat:@"%0.0f", truncf(n)];
    NSString * rightNumber = [[NSString stringWithFormat:@"%0.2f", fmodf(n, 1.0)] substringFromIndex:2];
    NSLog(@"'%@' '%@'", leftNumber, rightNumber);
    

    但是,这并不理想,尤其是在以习惯单位表示长度时,因为 0.11 英尺不是 11 英寸。您最好将长度表示为您支持的最小单位中的整数(例如,1/16 英寸),然后将其转换为实际长度以供显示。在此表示中,5 英尺 11 英寸为 5*12*16 + 11*16 = 1136。

    【讨论】:

      【解决方案3】:

      您可以使用这样的数字格式化程序

      NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
      formatter.numberStyle = NSNumberFormatterDecimalStyle;
      formatter.decimalSeparator = @"'";
      formatter.positiveSuffix = @"\"";
      formatter.alwaysShowsDecimalSeparator = true;
      NSString *numberString = [formatter stringFromNumber:@(5.11)];
      
      // Output : 5'11"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-31
        • 2011-05-30
        相关资源
        最近更新 更多