簡體   English   中英

將小數位數修剪到2個小數位數,除非小數位數超過2個小數位數

[英]Trim decimal to 2 decimal places except if decimal has more than 2 decimal places

所以這是一個挑剔的問題。 我到處尋找類似的問題,但是找不到專門回答我問題的問題。

我正在制作一個winforms應用程序,該應用程序可以從數值上下轉換中獲取數據,並將其放置在Word文檔變量中。 數字下移的精度為小數點后4位,因為某些價格(例如€0,0125)例如印刷合同。 但其他價格將節省,例如€12,5000。 我目前將數字固定為2個小數位,如下所示:

string value = type.GetValue().ToString().Trim(new char[] { '\'' });
//Changes commas for European standard and removes the excess zeros after the comma.
if (type.GetType().ToString().EndsWith("Decimal"))
{
    string s;
    string sep = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
    if (sep == ".")
        s = double.Parse(value).ToString("n2").Replace('.', ',');

    else
        s = double.Parse(value).ToString("n2");

    wordDoc.Variables[type.GetName()].Value = s;
}
else
    wordDoc.Variables[type.GetName()].Value = value;

但是我似乎無法弄清楚如何檢測何時不應該修整小數位。 我不一定需要代碼示例,如果有人可以按正確的方向發送給我,那將是一個很大的幫助。

注意:更改數字下降的精度並不是真正的選擇,因為它們是由方法動態創建的。

只需使用自定義格式的字符串 - #,##0.00##將顯示最小2 dp,最大4 dp

decimal x = 12.50000m;
decimal y = 0.0125m;

string sx = x.ToString("#,##0.00##"); // "12.50"
string sy = y.ToString("#,##0.00##"); // "0.125"

如果需要逗號十進制分隔符,請使用適當的CultureInfo或使用正確的屬性創建NumberFormatInfo

var nfi = new NumberFormatInfo
{
    NumberDecimalSeparator = ",",
    NumberGroupSeparator = ".",
};

string s = 1234.56m.ToString("#,##0.00##", nfi); // "1.234,56"

暫無
暫無

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

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