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