猿问

当数字是整数而不是小数或双精度时,为什么 WriteLine 会跳过 Tab

这似乎是一种奇怪的行为。


我在下面有这段代码,它从数据库中提取值,然后将它们写入文件。


x.Amount 是双精度类型的属性。


StringWriter sw = new StringWriter();

foreach (var x in result)

{

                  sw.WriteLine("name:" + "\t" + 4 + "\t" + x.Amount + "\t" + x.age);


}


问题是当金额为整数或整数时,标签不会被打印出来。


所以我明白了。


name:   4    350.5    26

name:   4    350.25   29

name:   4    2000.25  29

name:   4    350 29

正如您在上面看到的,当金额为整数时,文件中似乎缺少选项卡。


我正在使用下面的代码将它写入文件。


using (StreamWriter writer = new StreamWriter(Response.OutputStream, Encoding.Default))

            {

                writer.Write(sw.ToString());

            }


米脂
浏览 159回答 2
2回答

九州编程

您的标签没有丢失;您的编辑器只是选择该制表位。要将文本对齐到列中,请指定列的宽度。在这里,我会将您的金额填充到 8 个字符。根据需要更改此数字。我提出两种解决方案。我推荐第一个。解决方案 1:使用复合格式使用Composite Formatting将数量填充到 8 个字符:StringWriter sw = new StringWriter();foreach (var x in result){    sw.WriteLine(String.Format("name:\t{0}\t{1,-8}\t{2}", 4, x.Amount, x.age));}解决方案 2:连接虽然我建议使用 Composite Formatting,但您可以在没有以下情况的情况下执行此操作:StringWriter sw = new StringWriter();foreach (var x in result){    sw.WriteLine("name:" + "\t" + 4 + "\t" + x.Amount.ToString().PadRight(8) + "\t" + x.age);}

慕标琳琳

选项卡没有丢失。将选项卡视为带有列的表格。每列开始是一个制表位位置。不管 column1 中有多少个字母,下一个 column2 总是从左边缘开始。因此,第 1 列和第 2 列中的值将缩小它们之间的间距。看起来间距是错误的,但它实际上改变了列,它只是看起来是错误的。a |b |caaaa |bbbb |c
随时随地看视频慕课网APP
我要回答