2014-11-04 1 views
0

Я получил продолжительность от службы. продолжительность составляет 0,73 , так что я попробовал этотПреобразование числа в цифры в Objective 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,45 выше 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: 450ms. но я не могу попробовать это. любой орган помогает этому. Заранее спасибо.

+0

Вы можете использовать NSDateComponentsFormatter в написании пользовательского форматировщик – Felix

+0

@ phix23 я понял. но как я могу получить ожидаемый результат. Мне нужно удалить первое число из целого числа. можете ли вы дать какие-либо ссылки – akk

+1

Это большая работа для вызова 'NSLog()' ... – trojanfoe

ответ

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

+0

Оба одинаковы, так что это не имеет значения! Он отвечает Первому и зависит от вас! –

4

% 012.f означает, что вы хотите, чтобы ваш ответ всегда имел 12 мест с 0 отступом для этих мест. Для того, чтобы изменить его на то, что вы написали, вы можете сделать

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

Это напечатает число миллисекунд без каких-либо знаков после запятой, так что если у вас есть 1.4566 вы будете в конечном итоге с 01s:457ms. Это то, чем вы были?

Вы можете узнать больше о форматировании строк, просмотрев справочную страницу для printf на машине * nix, перейдите на терминал и введите man printf.

+0

выход «01s: 1450 ms». ожидаемый o/p составляет 01 с: 450 мс. Мне нужно удалить 1 из 1450 мс – akk

+0

Тогда вам нужно сделать двойной 'double d = (value - floor (value)) * 1000;' когда вы делаете d. Это получает только дробную часть значения. –

+0

Ваш код сейчас работает. Но я принял другой ответ, потому что у него меньше очков для увеличения очков. – akk

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

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)