我想创建一个可以根据整数的长度设置小数长度的函数。
让我说我有这些数字:
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
答案 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;
}
这似乎也有效