根据长度自动调整小数

时间:2014-02-24 18:44:17

标签: c# .net

我想创建一个可以根据整数的长度设置小数长度的函数。

让我说我有这些数字:

100.12345
10.123456
1.1234567

整数的总长度应为5,并应调整小数分隔符,使其适合5个数字。这是我想要的输出:

100.12
10.123
1.1234

有没有简单的方法可以在C#中实现这一目标?

更新:在我关于转换应该如何的问题中更清楚。

(当前编号>格式化编号)

100000.222 > 100000
10.222222  > 10.222
1.22       > 1.22
1          > 1
0.2222     > 0.2222

2 个答案:

答案 0 :(得分:2)

不确定这是一个好的答案,但似乎有效

decimal FormatToMaxLength(decimal v, int maxLength)
{

    string s = string.Format("{0}", v);
    if(s.Length > maxLength + 1)
        s = s.Substring(0, maxLength + 1);
    decimal cv;
    decimal.TryParse(s, out cv);
    return cv;
}

修订版,如果小数在整个部分中的数字多于请求的长度,则保留整个部分

decimal FormatToMaxLength(decimal v, int maxLength)
{
    string s = string.Format("{0}", v);
    string[] parts = s.Split(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0]);
    if(parts[0].Length >= maxLength)
        s = parts[0];
    else
        s = s.Substring(0, Math.Min(s.Length, maxLength + 1));
    decimal cv;
    decimal.TryParse(s, out cv);
    return cv;
}

测试的例子

decimal d = FormatToMaxLength(121.12233m, 5);  // returns 121.12
decimal z = FormatToMaxLength(123456789.12345m, 5);  // returns 123456789

我仍然不相信转换为字符串然后选择子集是一个好主意 让我们看看是否有人有更好的方法或看到我错过的明显解决方案。

答案 1 :(得分:0)

static string FormatToMaxLength(decimal d, int maxLength)
    {
        string s = d.ToString();
        s = s.Remove(s.Length - (s.Length - maxLength + 1), s.Length - maxLength - 1);
        return s;
    }

这似乎也有效