2014-11-04 41 views
0

我已收到服務期限。的持續時間是0.73 所以我已經嘗試了本將號碼轉換爲目標C中的數字

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以上

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接收到1.45:450ms。但我不能嘗試這個。任何機構都可以幫助。提前致謝。

+0

您可以使用NSDateComponentsFormatter是編寫自定義格式 – Felix 2014-11-04 07:40:49

+0

@ phix23我明白了。但我怎麼能得到預期的結果。我需要刪除整數中的第一個數字。你可以給任何參考 – akk 2014-11-04 07:41:41

+1

這對於'NSLog()'調用有很多工作... – trojanfoe 2014-11-04 08:06:18

回答

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

&ABao答案都是正確的。我的答案我接受。 :P – akk 2014-11-04 09:23:54

+0

兩者都是一樣的,所以沒關係!他回答第一,它依靠你! – 2014-11-04 10:02:42

4

%012.f意味着你希望你的答案總是有12個地方有0填充這些地方。將其更改爲你寫,你可以做

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

這將打印不帶小數位的數毫秒,所以如果你有1.4566,你將最終01s:457ms什麼。這是你以後的事嗎?

通過在* nix機器上查找printf的手冊頁,可以找到有關字符串格式設置的更多信息,然後輸入man printf。

+0

輸出是「01s:1450 ms」。預期o/p是01s:450 ms。我需要從1450 ms刪除1 – akk 2014-11-04 09:15:05

+0

然後,您需要執行double double d =(value - floor(value))* 1000;'當您製作d時。這隻獲得值的小數部分。 – 2014-11-04 10:50:58

+0

你的代碼現在正在工作。但我接受了另一個答案,因爲他沒有提高積分的積分。 – akk 2014-11-04 11:11:26

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 
    } 
+0

&Saurabh Prajapati答案都是正確的。我的答案我接受。 :P – akk 2014-11-04 09:23:18

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)