Objective C 将 int 转换为 NSString (iPhone)

Posted

技术标签:

【中文标题】Objective C 将 int 转换为 NSString (iPhone)【英文标题】:Objective C Convert int to NSString (iPhone) 【发布时间】:2011-01-24 05:51:02 【问题描述】:

我有以下代码用于将毫秒转换为小时、分钟和秒:

int hours = floor(rawtime / 3600000);

int mins = floor((rawtime % 3600000) / (1000 * 60));
int secs = floor(((rawtime % 3600000) % (1000 * 60)) / 1000);

NSLog(@"%d:%d:%d", hours, mins, secs);

NSString *hoursStr = [NSString stringWithFormat:@"%d", hours];
NSString *minsStr = [NSString stringWithFormat:@"%d", mins];
NSString *secsStr = [NSString stringWithFormat:@"%d", secs];

NSLog(@"%a:%a:%a", hoursStr, minsStr, secsStr);

相当简单。 Rawtime 是一个值为 1200 的 int。输出如下:

0:0:1

0x1.3eaf003d9573p-962:0x1.7bd2003d3ebp-981:-0x1.26197p-698

为什么将整数转换为字符串会产生如此疯狂的数字?我试过使用 %i 和 %u ,它们没有任何区别。发生了什么?

【问题讨论】:

重复(?)how to convert from int to string in iphone 【参考方案1】:

您必须使用%@ 作为 NSString 的转换说明符。将最后一行更改为:

NSLog(@"%@:%@:%@", hoursStr, minsStr, secsStr);

%a 意味着完全不同的东西。来自printf()man page:

aA double 参数被四舍五入并转换为样式中的十六进制表示法

[-]0xh.hhhp[+-]d

十六进制点字符后的位数等于精度规范。

【讨论】:

啊,我知道这很简单,我错过了。谢谢。【参考方案2】:

您应该使用NSNumberFormatter 表示数字或使用NSDateFormatter 表示日期/时间,而不是滚动您自己的字符串格式代码。这些数据格式化程序负责将格式本地化到用户的语言环境并处理内置的各种格式。

为了您的使用,您需要将您的毫秒时间转换为NSTimeIntervaltypedef'd from a double):

NSTimeInterval time = rawtime/1e3;

现在您可以使用NSDateFormatter 来显示时间:

NSDate *timeDate = [NSDate dateWithTimeIntervalSinceReferenceDate:time];
NSString *formattedTime = [NSDateFormatter localizedStringFromDate:timeDate
                                                         dateStyle:NSDateFormatterNoStyle 
                                                         timeStyle:NSDateFormatterMediumStyle];
NSString *rawTime = [[formattedTime componentsSeparatedByString:@" "] objectAtIndex:0];

在 OS X 上,最后一行删除了“AM/PM”。这将在不到 12 小时的任何时间内工作,并将以 HH:MM:SS 的本地化格式提供格式化字符串。在 iPhone 上,localizedStringFromDate:dateStyle:timeStyle: 不可用(目前)。您可以在日期格式化程序实例上使用setTimeStyle:setDateStyle:stringFromDate: 实现相同的效果。

【讨论】:

在 iphone 上可以使用本地化StringFromDate 吗?也许必须改用 setLocale? @DyingCactus 你说的完全正确; localizedStringFromDate:dateStyle:timeStyle 在 iPhone 上不可用(目前)。您可以使用setDateStyle:setTimeStyle 后跟stringFromDate: 来实现相同的功能

以上是关于Objective C 将 int 转换为 NSString (iPhone)的主要内容,如果未能解决你的问题,请参考以下文章

将int转换为float

如何在objective-c中将字节值转换为int

Objective C 从字符串中解析整数

Swift - 将 Int 转换为 enum:Int

将 NSStrings 转换为 C 字符并从 Objective-C 调用 C 函数

将方法从 Objective C 转换为 Swift