我想创建一个函数,该函数可以根据整数的长度设置十进制长度。
假设我有这些数字:
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;
}
这似乎也有效