我知道这有很多问题,但我没有发现任何有关此问题的事情。
我尝试按照以下格式格式化数字: value.ToString(“N”,new CultureInfo(“fr-CA”))。 值的类型是float。格式适用但不是我应该采用的方式。我指的是this article about formatting
这里举例说明:
123456 display as 123 456.00
123456.789 display as 123 456.79 // rounded
1234.5 display 1 234.50 //added a 0 padding
有没有办法格式化这样的东西?
123456 display as 123 456
123456.789 display as 123 456.789
1234.5 display as 1 234.5
以下是我尝试应用格式化代码的代码
private void dgvform_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
float val;
if ( (e.ColumnIndex == valeur.Index || e.ColumnIndex == valeurEN.Index)
&& dgvform.Rows[e.RowIndex].Cells[type_d.Index].Value != null && dgvform.Rows[e.RowIndex].Cells[type_d.Index].Value.ToString() == "N"
&& dgvform.Rows[e.RowIndex].Cells[valeur.Index].Value != null
&& float.TryParse(dgvform.Rows[e.RowIndex].Cells[valeur.Index].Value.ToString(), out val))
{
if (e.ColumnIndex == valeurEN.Index)
e.Value = val.ToString("N", new CultureInfo(_formatEN));
else
e.Value = string.Format("{0:# ### ###.####}", val);
}
}
这是datagridview的一部分。大if
是确定我是否需要将格式应用于此单元格。 valeur
,valeurEN
都是列,我需要应用格式化。 e.Value = val.ToString("N", new CultureInfo(_formatEN));
是我应用格式的旧方法。 _formatEN
基本上是“en-US”。
基本上我想添加一千个分隔符,并确保使用良好的小数分隔符 任何关于我做错的事情?
/ edit: value 是一种浮动
答案 0 :(得分:1)
我假设您需要构建custom numeric format string。
value.ToString("#,0.##########", new CultureInfo("fr-CA"))
前导#,0
部分引入了千位分隔符,而尾随.###…
会根据需要添加尽可能多的小数位(最多对应于您指定的#
个字符数)。 ,
和.
说明符不是逐字使用的,而是根据当前文化进行解释。
有关示例运行,请参阅http://ideone.com/QypZBP:
double d = 12345.6789;
Console.WriteLine(d.ToString("#,0.##########", new CultureInfo("fr-CA")));
// Output: "12 345,6789"
修改:由于您已澄清您使用的是float
,因此最后一位数字被截断的原因是由于该数据类型的精确度有限。根据MSDN,float
具有7位数的精度,这意味着最后两位数字甚至永远不会存储在您的变量中。如果您希望能够代表您的号码,则应将数据类型更改为double
。