使用 Decimal.ToString() 而不对数字进行四舍五入

问题描述 投票:0回答:2

我有以下十进制数

string number = "60.9";
Response.Write(Convert.ToDecimal(number).ToString("#,0")); // prints 61

我想将值格式化为 99,999,999...但如果该值有小数点,则会向上舍入

请告诉我如何打印 60.9,而不是具有相同数字格式的 61

c# decimal
2个回答
4
投票

您可以使用

N
格式。这将显示带有您所在区域设置的组分隔符的数字(例如,对于美国区域设置,
,
,尽管您可以选择影响它),并保留小数部分不变:

Convert.ToDecimal(number).ToString("N")

更新。经过评论中的一些讨论,满足所有要求的方法似乎是

Convert.ToDecimal(number).ToString("#,#.##########", CultureInfo.InvariantCulture)

乔恩致敬。


0
投票

自定义(不是最好的,但有效)解决方案:

public static string FormatDecimal(string value, bool addSign = true, bool showDecimals = true)
{
    if (value == null)
    { return ""; }

    var r = value.Replace("$", "");

    if (showDecimals)
    {
        r = Convert.ToDecimal(r).ToString("C").Replace("$", "");
    }
    else
    {
        var newFormat= "";
        r = Convert.ToDecimal(r).ToString("C").Replace(".00", "").Replace("$", "");
        for (int i = 0; i < r.Length; i++)
        {
            if (r[i] == '.')
            {
                break;
            }
            newFormat += r[i];
        }
        r = newFormat;
    }


    if (addSign)
    {
        r = "RD$" + r;
    }

    return r;
}
© www.soinside.com 2019 - 2024. All rights reserved.