簡體   English   中英

意外的數字格式輸出

[英]unexpected number formatting output

我知道對此有很多疑問,但我沒有發現對此有任何反感。

我嘗試按照以下格式格式化數字: value.ToString(“ N”,new CultureInfo(“ fr-CA”)) 的類型為float。 該格式適用,但我無法做到這一點。 我參考了有關格式化的這篇文章

這里的例子:

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是確定是否需要將格式應用於此單元格。 valeurvaleurEN都列都需要應用格式化。 e.Value = val.ToString("N", new CultureInfo(_formatEN)); 是我套用格式的舊方法。 _formatEN基本上是“ en-US”。

基本上我想添加一千個分隔符,並確保使用好十進制分隔符來說明我做錯了什么嗎?

/ edit: 是浮點類型

我認為您需要構建一個自定義的數字格式字符串

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM