将Number转换为Objective C中的数字

时间:2014-11-04 07:31:23

标签: ios objective-c iphone macos nsnumber

我已收到服务期限。持续时间为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.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。但我不能尝试这个。任何身体帮助这个。在此先感谢。

4 个答案:

答案 0 :(得分:4)

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

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

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

您可以在* nix机器上查找printf的手册页,找到有关字符串格式的更多内容,转到终端并键入man printf。

答案 1 :(得分: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
    }

答案 2 :(得分:2)

我知道这个问题已得到解答。但是好奇地使用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)

答案 3 :(得分:0)

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);
}