【问题标题】:How to Format String with space for single digit numbers? [duplicate]如何用空格格式化单个数字的字符串? [复制]
【发布时间】:2013-04-08 10:34:45
【问题描述】:

我在上传视频时向用户显示一个字符串

20% uploaded

所以当百分比数字是个位数时,我希望用空格字符填充十位的空间。

就像我们如何多次显示 01,02,03 作为单个数字的解决方案一样,我想显示空格而不是那个 0。

【问题讨论】:

  • 我不明白你的问题。这不是在显示下载百分比时放入空格而不是0 一样简单吗?
  • @SrikarAppal:如果有格式字符串,我正在考虑使用格式字符串。
  • @CRDave:我想要空格而不是 0。
  • 有什么大不了的,用空格替换 0。如果你想要 A 而不是用 A 替换。你可以在那个地方放任何字符。

标签: objective-c printf


【解决方案1】:

我能想到的最好的办法是检查值。如果小于 10,则打印一个空白字符。您可以使用 %.*s 将其合并到 printf 中:printf("%.*s%d%% uploaded", value < 10, " ", value);

编辑:根据规范,字段宽度 *(或十进制整数)似乎为您执行此操作:printf("%*d%% uploaded", 2, value);(或 printf("%02d%% uploaded", 2, value);

【讨论】:

  • 什么时候100%,对齐会丢失。
  • 就我而言,我根本不显示 100%,一旦上传完成,我会显示自视频上传以来的时间,即“现在”而不是 100%。因此,只有在上传过程中,我才需要显示不超过 2 位数的百分比。即使是这样,我也可以保留 3 位而不是 2 位的空间。像这样: printf("%*d%% upload", 3, value) 对齐将始终存在。
【解决方案2】:

modifiable lvalue's answer适合在 % 和 digit 之间获得首选空间。您只需检查值,并相应地找到“%”符号。 或者还有另一种方式。

例如我正在使用以下格式显示 % 符号。

[NSString stringWithFormat:@"%.0f%% of 100% 上传..",progressValue*10];

这会相应地管理您的值和“%”符号之间的空间。

【讨论】:

  • 我没有通过尝试这种方法得到对齐。另外,100% 应该是 100%%
  • 是的,这是我的错误,应该有 100%% 。但我可以使用 '.0f' 格式管理数字 n % 符号之间的空间。
【解决方案3】:

您需要将格式设置为%<alighmentInteger>d

您可以将值存储到stringWithFormat:

仅用于显示我是直接 NSLogging。

    NSLog(@"%3d%%",i); //this will pad 3 white spaces. 

如果您想要 2 个空格,请使用 2d

例如:

for (int i=0; i<101; i+=25) {
    NSLog(@"%3d%% uploaded",i);
}

输出:

2013-04-16 11:55:16.002 DynamicObject[48056:303] 0% 上传 2013-04-16 11:55:16.003 DynamicObject[48056:303] 25% 上传 2013-04-16 11:55:16.003 DynamicObject[48056:303] 50% 上传 2013-04-16 11:55:16.004 DynamicObject[48056:303] 75% 上传 2013-04-16 11:55:16.004 DynamicObject[48056:303] 100% 上传

【讨论】:

  • 比我的回答有效得多;不知道,谢谢。
  • @tolgamorf:即使你的答案和我的一样。我11分钟前在评论里发了这个,等没人给正确答案,所以我终于把它发在这里了。
  • 那时我正在研究它,所以没有看到你的评论。 :) 现在我想起来了,在我的回答中,当进度为100% 时,对齐会丢失。
  • 您的答案也有效,但我只能将其中一个标记为正确。您以他作为参数的格式指定 3 或 2。我稍微喜欢另一种方法,因为位数是一个可以更好地控制的参数:)
【解决方案4】:

这是一个返回所需输出的方法

- (NSString *)uploadProgress:(NSUInteger)progress {
    return [NSString stringWithFormat:@"%@%% uploaded", progress < 10 ?
            [NSString stringWithFormat:@" %i", progress] :
            [NSString stringWithFormat:@"%i", progress]];
}

呼叫:

NSLog(@"%@", [self uploadProgress:5]);
NSLog(@"%@", [self uploadProgress:50]);

输出:

2013-04-16 02:24:49.948 stackoverflow test001[11587:c07]  5% uploaded
2013-04-16 02:24:49.949 stackoverflow test001[11587:c07] 50% uploaded

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 2016-10-18
    • 1970-01-01
    • 2011-08-09
    相关资源
    最近更新 更多