为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
米脂 2023-05-14 16:36:24
这似乎是一种奇怪的行为。我在下面有这段代码,它从数据库中提取值,然后将它们写入文件。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    26name:   4    350.25   29name:   4    2000.25  29name:   4    350 29正如您在上面看到的,当金额为整数时,文件中似乎缺少选项卡。我正在使用下面的代码将它写入文件。using (StreamWriter writer = new StreamWriter(Response.OutputStream, Encoding.Default))            {                writer.Write(sw.ToString());            }
查看完整描述

2 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

您的标签没有丢失;您的编辑器只是选择该制表位。

要将文本对齐到列中,请指定列的宽度。在这里,我会将您的金额填充到 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);

}


查看完整回答
反对 回复 2023-05-14
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

选项卡没有丢失。将选项卡视为带有列的表格。每列开始是一个制表位位置。不管 column1 中有多少个字母,下一个 column2 总是从左边缘开始。因此,第 1 列和第 2 列中的值将缩小它们之间的间距。看起来间距是错误的,但它实际上改变了列,它只是看起来是错误的。

a |b |c

aaaa |bbbb |c


查看完整回答
反对 回复 2023-05-14
  • 2 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信