我正在从事C#项目。我正在解析datagridview的值并将其格式化,但问题是除1以外的所有值都被完美地解析了。非常有趣,这是我第一次遇到这种情况。
for (int i=0; i<dgKisiFatura.Rows.Count-1; i++)
for (int j = 3; j < dgKisiFatura.Columns.Count; j++)
{
dgKisiFatura.Rows[i].Cells[j].Value = string.Format("{0:n2}",
Math.Round(double.Parse(dgKisiFatura.Rows[i].Cells[j].Value.ToString()), 2));
dgKisiFatura.Columns[j].DefaultCellStyle.Font = fontSayi;
}
问题是它正在解析以下所有值,除了一个240000
这些是我设置为DataGridView
的确切字符串。
dgKisiFatura.Rows[0].Cells[4].Value = "4320000";
dgKisiFatura.Rows[1].Cells[4].Value = "1680000";
dgKisiFatura.Rows[2].Cells[4].Value = "600000";
dgKisiFatura.Rows[3].Cells[4].Value = "540000";
dgKisiFatura.Rows[4].Cells[4].Value = "600000";
dgKisiFatura.Rows[5].Cells[4].Value = "1800000";
dgKisiFatura.Rows[6].Cells[4].Value = "240000"; // <- Here is the problem
dgKisiFatura.Rows[7].Cells[4].Value = "1800000";
dgKisiFatura.Rows[8].Cells[4].Value = "480000";
dgKisiFatura.Rows[9].Cells[4].Value = "1440000";
dgKisiFatura.Rows[10].Cells[4].Value = "360000";
dgKisiFatura.Rows[11].Cells[4].Value = "900000";
dgKisiFatura.Rows[12].Cells[4].Value = "120000";
dgKisiFatura.Rows[13].Cells[4].Value = "2160000";
dgKisiFatura.Rows[14].Cells[4].Value = "900000";
dgKisiFatura.Rows[15].Cells[4].Value = "17940000";
我将所有这些内容放入try and catch块中,除了240000
之外,它都可以完美解析。
如果我使用try / catch,它将通过该值并保持正常运行。 我需要你的帮助。我想念什么吗?
答案 0 :(得分:2)
与TheGeneral的答案相同,但是表示形式略有不同(使用string
s时,字符通常比字节更方便)。让我们看一下字符串的 dump :
using System.Linq;
...
string data = "240000"; // Copy + Paste from the question
string dump = string.Join(Environment.NewLine,
data.Select(c => $"'{c}' (\\u{(int)c:x4})"));
Console.Write(dump);
结果:
'2' (\u0032)
'4' (\u0034)
'0' (\u0030)
'0' (\u0030)
'0' (\u0030)
'0' (\u0030)
'' (\u202c) <- the very reason of misbehavior
我们看到,data
以不可见 Unicode字符\u202c(POP方向格式化)结尾,这就是为什么data
无法解析为double
答案 1 :(得分:1)
"240000"
的末尾有一个不可打印的怪异字符48 32
您可以通过
更好地查看它var result = System.Text.Encoding.Unicode.GetBytes("240000");
弄清楚为什么会出现这种情况,阻止它发生,您已经解决了问题