【问题标题】:Convert Number to digits in Objective C在Objective C中将数字转换为数字
【发布时间】:2014-12-31 00:41:09
【问题描述】:

我已收到服务期限。持续时间为 0.73 所以我试过这个

if (value >= 1.0 && value < 60.0) {
    double value = 0.73;
    double d = value * 1000;
    NSLog(@"milli seconds = %03d ms",(int)d);
    //Output is 730ms    --> which is correct. 
}

如果我收到高于 1.0 的 1.45

double value = 1.45
if (value >= 1.0 && value < 60.0) {
    double d = value * 1000;
    double sec = (int)value % 60;
    NSLog(@"%02d s:%012.f ms",(int)sec, d);
    //Output is 01 s: 000000001450 ms
}


The output should be as 01s:450ms

我需要将其更改为 01s:450ms。但我不能试试这个。任何机构都对此有所帮助。提前致谢。

【问题讨论】:

  • 您可以使用 NSDateComponentsFormatter 编写自定义格式化程序
  • @phix23 我明白了。但我怎样才能得到预期的结果。我需要删除整数中的第一个数字。能给个参考吗
  • NSLog() 电话的工作量很大...

标签: ios objective-c iphone macos nsnumber


【解决方案1】:

%012.f 表示您希望您的答案始终有 12 个位置,这些位置的填充为 0。要将其更改为您所写的内容,您可以这样做

NSLog(@"%02ds:%03.0f ms",(int)sec, d);

这将打印没有小数位的毫秒数,因此如果您有 1.4566,您最终将得到 01s:457ms。这就是你所追求的吗?

您可以通过在 *nix 机器上查找 printf 的手册页来了解有关字符串格式化的更多信息。转到终端并键入 man printf。

【讨论】:

  • 输出为“01s:1450 ms”。预期的 o/p 为 01s:450 ms。我需要从 1450 毫秒中删除 1
  • 那你在做d的时候需要做doubledouble d = (value - floor (value)) * 1000;。这仅获取值的小数部分。
  • 您的代码现在可以工作了。但是我接受了另一个答案,因为他增加积分的积分较少。
  • 您可能需要检查是否得到了 1.045 的正确结果,因为您可能需要 %03.0f 中的 03 才能打印出您想要的内容。
  • 是的。按照您的指示正常工作。很棒。
【解决方案2】:

试试这个代码

   double value = 1.45;

    if (value >= 1.0 && value < 60.0) {
        int sec = (int)value;
        int minisecond = value*1000 - sec*1000;
        NSLog(@"%02d s:%3d ms",(int)sec, minisecond);
        //Output is 01 s:450 ms
    }

【讨论】:

  • & Saurabh Prajapati 的回答都是正确的。我接受谁的回答。 :P
【解决方案3】:
double value = 1.45;
if (value >= 1.0 && value < 60.0) {    
    double sec = (int)value % 60;
    double d = (value - sec) * 1000;
    NSLog(@"%02ds:%.0f ms",(int)sec, d);
}

【讨论】:

  • &阿宝的回答都是正确的。我接受谁的回答。 :P
  • 两者都一样,所以没关系!他首先回答,这取决于你!
【解决方案4】:

我知道问题已得到解答。但是好奇的人用NSDateComponentsFormatter

class customFormatter: NSDateComponentsFormatter {

    override init() {
        super.init()
    }

     convenience required init(coder aDecoder: NSCoder) {
        self.init()
    }

    override func stringForObjectValue(obj: AnyObject) -> String? {

        if(obj.isKindOfClass(NSNumber.classForCoder()))
        {
            var whole = UnsafeMutablePointer<Float>.alloc(obj.integerValue)
            var fractional : Float
            fractional = modff(obj.floatValue, whole)
            return "\( obj.floatValue - fractional )s \(fractional * 1000)ms"
        }
        return "Bad Input Type"
    }


}

let formatter = customFormatter()
formatter.unitsStyle = .Abbreviated
let number = 10.4
let string = formatter.stringForObjectValue(number)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-29
    • 2011-03-12
    • 2013-08-02
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    相关资源
    最近更新 更多