2

谁能告诉我为什么这个 string.Format() 不显示第一个值?

long countLoop = 0;
long countTotal = 3721;

string.Format("Processed {0:#,###,###} lines of {1:#,###,###} ({2:P0})", countLoop, countTotal, ((double)countLoop / countTotal));

我得到的结果是

Processed  lines of 3,721 (0 %) 

但是如果我用数字 1 替换 countTotal

string.Format("Processed {0:#,###,###} lines of {1:#,###,###} ({2:P0})", 1, countTotal, ((double)countLoop / countTotal));

我明白了

处理了 1 行 3,721 (0 %)。

string.Format 有什么我不知道的吗?

4

2 回答 2

5

请参阅有关“#”自定义格式说明符的文档:

请注意,此说明符从不显示不是有效数字的零,即使零是字符串中的唯一数字。

如果您想在这种情况下显示“0”,请查看“0”自定义格式说明符

如果正在格式化的值在格式字符串中出现零的位置有一个数字,则该数字将复制到结果字符串中;否则,结果字符串中将出现零。

这应该适合你:

string.Format(
    "Processed {0:#,###,##0} lines of {1:#,###,###} ({2:P0})", 
    countLoop, countTotal, ((double)countLoop / countTotal));
于 2013-08-15T21:55:06.887 回答
4

将您的字符串格式更改为

string.Format("Processed {0:#,###,##0} lines of {1:#,###,###} ({2:P0})", countLoop, countTotal, ((double)countLoop / countTotal));

当 countLoop 为零时,这将打印 0。

正如其他人在我之前所说的那样,当 # 占位符不是有效数字时,它不会打印零。

请注意,我已在格式字符串中修复了您的索引。您只有三个参数,因此索引从 0 变为 2(而不是最后的 3({3:P0})

于 2013-08-15T21:56:55.220 回答