string.format()没有显示值

时间:2013-08-15 21:51:58

标签: c# .net

有谁能告诉我为什么这个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 %) 

但是如果我将countTotal替换为数字1

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

我明白了

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

有关于我不了解的string.Format的内容吗?

2 个答案:

答案 0 :(得分:5)

请参阅the "#" custom format specifier上的文档:

  

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

如果您想在这种情况下显示“0”,请查看the "0" custom format specifier

  

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

这应该适合你:

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

答案 1 :(得分:4)

将字符串格式更改为

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

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

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

注意我已在格式字符串中修改了索引。 你只有三个参数,所以索引从0到2(不是你最后的3 {/ 1}}