Pulpcode

捕获,搅碎,拼接,吞咽

0%

关于几个金融计算中会用到的公式

非原创,从网上收集的,但是写花了些功夫,因为网上的大多数例子是错误的。

如何将一个金额转换为中文的大写形式

程序

1
2
3
4
5
6
7
8
9
10
11
/// <summary>
/// 此函数用来将一个金额数字转化为大写
/// </summary>
/// <param name="x"></param>
/// <returns></returns>
public static string ConvertToChinese(decimal x)
{
string s = x.ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");
string d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\.]|$))))", "${b}${z}");
return Regex.Replace(d, ".", m => "负元空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟萬億兆京垓秭穰"[m.Value[0] - '-'].ToString());
}

测试用例

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
[TestClass]
public class ConvertToChineseTest
{
[TestMethod]
public void TestMethod1()
{
var actual = Formula.ConvertToChinese(100m);
const string expected = "壹佰元";
Assert.AreEqual(expected, actual);
}

[TestMethod]
public void TestMethod2()
{
var actual = Formula.ConvertToChinese(1001.33m);
const string expected = "壹仟零壹元叁角叁分";
Assert.AreEqual(expected, actual);
}

[TestMethod]
public void TestMethod3()
{
var actual = Formula.ConvertToChinese(100001.33m);
const string expected = "壹拾萬零壹元叁角叁分";
Assert.AreEqual(expected, actual);
}
}

显示金额时,将末尾多余的零移出。

程序

1
2
3
4
5
6
7
8
9
/// <summary>
/// 除去一个数字多余的零
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string RemoveExcessZero(decimal number)
{
return number.ToString("0.#########");
}

测试用例

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
[TestClass]
public class OutputDecimalTest
{
[TestMethod]
public void TestMethod1()
{
var resStr = Formula.OutputDecimalRound(34.000m);
Assert.AreEqual("34", resStr);
}

[TestMethod]
public void TestMethod2()
{
var resStr = Formula.OutputDecimalRound(35.030m);
Assert.AreEqual("35", resStr);
}

[TestMethod]
public void TestMethod3()
{
var resStr = Formula.RemoveExcessZero(32.34000m);
Assert.AreEqual("32.34",resStr);
}

[TestMethod]
public void TestMethod4()
{
var resStr = Formula.RemoveExcessZero(0.4300000m);
Assert.AreEqual("0.43", resStr);
}

[TestMethod]
public void TestMethod5()
{
var resStr = Formula.RemoveExcessZero(450m);
Assert.AreEqual("450", resStr);
}
}