根据长度自动调整小数

  • 本文关键字:调整 小数 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

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

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

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

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;
    }

这似乎也有效

最新更新