c# 见分进元和见毫进分

c# 见分进元和见毫进分是对小数的中国情况的特殊处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public static class StringExtensions
{
/// <summary>
/// 见分进元
/// </summary>
/// <param name="number">number</param>
/// <returns>string</returns>
public static string ToJFJYString(this decimal number)
{
return number % 1 != 0 ? (Math.Floor(number) + 1).ToString("f0") : number.ToString("f0");
}

/// <summary>
/// 见毫进分
/// </summary>
/// <param name="number">number</param>
/// <returns>string</returns>
public static string ToJHJFString(this decimal number)
{
// 获取小数位数
int decimalPlaces = GetDecimalPlaces(number);

if (decimalPlaces == 0)
{
return number.ToString("f0");
}
else
{
if (decimalPlaces < 3)
{
return number.ToString();
}
else if (decimalPlaces == 3)
{
if (number.ToString().EndsWith("0"))
{
return number.ToString("f2");
}
else
{
// 保留两位小数并加上 0.01
number = Math.Round(number, 2) + 0.01m;
return number.ToString("f2");
}
}
else
{
// 保留两位小数并加上 0.01
number = Math.Round(number, 2) + 0.01m;
return number.ToString();
}
}
}

private static int GetDecimalPlaces(decimal value)
{
// 获取小数位数
string[] parts = value.ToString().Split('.');
return parts.Length > 1 ? parts[1].Length : 0;
}
}