用的是C# Winform 开发的:
用StreamWriter写入txt文件中 后面的单价对不起,输出来的格式如下,请问,如何才能对齐单价呢
在程序中加了很多空格也是不行,有没有什么方法格式化让单价这一列对齐?
数量 物品 单价(¥)
----------------------------------------------------------------
1 C#数据大全 26.5
1 数据结构 36.8
1 台式电脑 4000.15
1 联想笔记本 3500.58
---------------------------------------------------------------
其中 程序如下
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
string name = dataGridView1.Rows[i].Cells["ProName"].Value.ToString();
string num = dataGridView1.Rows[i].Cells["ProNum"].Value.ToString();
string price = dataGridView1.Rows[i].Cells["ProPrice"].Value.ToString();
sw.WriteLine(" " + num + " " + name + "  
因为物品列的长度不同,所以后面才会产生错位现象的。
你需要设置一个标准值,例如30,其意义为:如果物品列字符为0时,将插入30个半角空格以作分隔
然后计算一下物品列字符串实际占位长度,因为汉字是全角字符,会占据两个英文字母、数字所占的位置,这与他们的字节数占用比例是相同的,所以可以通过计算字节数的方法来计算它实际的占位长度,可以通过这个方法来计算:
Encoding.Default.GetBytes(字符串).Length
比如 Encoding.Default.GetBytes("测试abc").Length 的结果就是7
然后再使用标准值减去这个计算得出的值,就是你需要插入的半角空格数了,这样就能保证单价列对齐。
另外,列是否能够对齐,还会受到字体影响,在某些非等宽字体中,各个字母所占据的宽度是不同的,那样你基本无法很好地控制对齐。
比如使用Thoma字体:
一定是你数据取出来的数据,二个列里面带有空格字符,导致不整齐,在后面加上.Trim()
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
string name = dataGridView1.Rows[i].Cells["ProName"].Value.ToString().Trim();
string num = dataGridView1.Rows[i].Cells["ProNum"].Value.ToString().Trim();
string price = dataGridView1.Rows[i].Cells["ProPrice"].Value.ToString().Trim();
sw.WriteLine(" " + num + " " + name + " "+ price)
}
这样就可以了
正愁找不到解决方法呢,谢谢 斯克迪亚 的解答,终于知道怎么写了