Skip to content

Commit 9c127ea

Browse files
minor improvements
1 parent 673630e commit 9c127ea

File tree

4 files changed

+60
-57
lines changed

4 files changed

+60
-57
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
# OneBitSoftware.Slovom
2+
![test]https://github.com/OneBitSoftware/OneBitSoftware.Slovom/actions/workflows/dotnet.yml/badge.svg
23
A .NET library that converts currency values into words in Bulgarian for accounting purposes

src/OneBitSoftware.Slovom.sln

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
33
# Visual Studio Version 17
4-
VisualStudioVersion = 17.13.35825.156 d17.13
4+
VisualStudioVersion = 17.13.35825.156
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OneBitSoftware.Slovom", "OneBitSoftware.Slovom\OneBitSoftware.Slovom.csproj", "{EC525DA1-1FFE-47B4-98A5-AEE7D391957B}"
77
EndProject
88
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "Tests\Tests.csproj", "{EED4ED6B-42C9-4F72-A8ED-48407B0714CB}"
99
EndProject
10+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8EC462FD-D22E-90A8-E5CE-7E832BA40C5D}"
11+
ProjectSection(SolutionItems) = preProject
12+
..\README.md = ..\README.md
13+
EndProjectSection
14+
EndProject
1015
Global
1116
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1217
Debug|Any CPU = Debug|Any CPU

src/OneBitSoftware.Slovom/NumbersToWords.cs

Lines changed: 45 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public static class NumbersToWords
1212
static string AppendLvFemale = " лева";
1313
static string AppendStotinki = " стотинки";
1414
static string AppendStotinka = " стотинка";
15+
static string AppendStotinkaShort = "ст.";
1516

1617
static string ConvertWholeNumber(int n)
1718
{
@@ -96,102 +97,100 @@ private static string Thousands(int n)
9697
return units[i] + " хиляди " + Hundreds(d);
9798
}
9899

99-
private static string TensOfThousands(int n)
100+
private static string TensOfThousands(int number)
100101
{
101-
var i = n / 10000;
102-
var d = n % 10000;
103-
var e = d % 1000;
104-
var j = d / 1000;
105-
var g = n / 1000;
106-
var h = n / 10;
107-
var f = g % 10;
108-
var r = e % 100;
109-
var t = r % 10;
102+
var o = number / 10000;
103+
var n = number % 10000;
104+
var e = n % 1000;
105+
var b = n / 1000;
106+
var i = number / 1000;
107+
var t = number / 10;
108+
var s = i % 10;
109+
var of = e % 100;
110+
var tware = of % 10;
110111

111-
//if (n == 10000) return "десет хиляди";
112-
113-
if (n > 10000 && n < 10099)
112+
if (number > 10000 && number < 10099)
114113
{
115-
return tens[i] + " хиляди и " + Tens(d);
114+
return tens[o] + " хиляди и " + Tens(n);
116115
}
117116

118-
if (n >= 10099 && n < 11000)
117+
if (number >= 10099 && number < 11000)
119118
{
120-
if (r == 0) // 10100, 10900, 10800 , etc
119+
if (of == 0) // 10100, 10900, 10800 , etc
121120
{
122-
return tens[i] + " хиляди и " + Hundreds(d);
121+
return tens[o] + " хиляди и " + Hundreds(n);
123122
}
124123

125-
return tens[i] + " хиляди " + Hundreds(d);
124+
return tens[o] + " хиляди " + Hundreds(n);
126125
}
127126

128-
if (n >= 11000 && n < 20000)
127+
if (number >= 11000 && number < 20000)
129128
{
130-
if (r == 0) // 11100, 11900, 11800 , etc
129+
if (of == 0) // 11100, 11900, 11800 , etc
131130
{
132131
if (e == 0)
133132
{
134-
return teens[f] + " хиляди";
133+
return teens[s] + " хиляди";
135134
}
136135

137-
return teens[f] + " хиляди и " + Hundreds(e);
136+
return teens[s] + " хиляди и " + Hundreds(e);
138137
}
139138

140-
return teens[f] + " хиляди " + Hundreds(e);
139+
return teens[s] + " хиляди " + Hundreds(e);
141140
}
142141

143-
if (n > 20000 && n < 99999)
142+
if (number > 20000 && number < 99999)
144143
{
145-
if (j == 1)
144+
if (b == 1)
146145
{
147146
if (e < 100)
148147
{
149-
return tens[i] + " и една хиляди и " + Tens(e);
148+
return tens[o] + " и една хиляди и " + Tens(e);
150149
}
151150

152-
if (t == 0)
151+
if (tware == 0)
153152
{
154-
return tens[i] + " и една хиляди и " + Hundreds(e);
153+
return tens[o] + " и една хиляди и " + Hundreds(e);
155154
}
156155

157-
if (t > 0)
156+
if (tware > 0)
158157
{
159-
return tens[i] + " и една хиляди " + Hundreds(e);
158+
return tens[o] + " и една хиляди " + Hundreds(e);
160159
}
161160
}
162161

163-
if (j == 2)
162+
if (b == 2)
164163
{
165164
if (e < 100)
166165
{
167-
return tens[i] + " и две хиляди и " + Tens(e);
166+
return tens[o] + " и две хиляди и " + Tens(e);
168167
}
169168

170-
if (t == 0)
169+
if (tware == 0)
171170
{
172-
return tens[i] + " и две хиляди и " + Hundreds(e);
171+
return tens[o] + " и две хиляди и " + Hundreds(e);
173172
}
174173

175-
if (t > 0)
174+
if (tware > 0)
176175
{
177-
return tens[i] + " и две хиляди " + Hundreds(e);
176+
return tens[o] + " и две хиляди " + Hundreds(e);
178177
}
179178
}
180179

181-
return Tens(g) + " хиляди и " + Hundreds(e);
180+
return Tens(i) + " хиляди и " + Hundreds(e);
182181
}
183182

184-
if (d == 0) // 10000,20000,30000, etc
183+
if (n == 0) // 10000,20000,30000, etc
185184
{
186-
return tens[i] + " хиляди";
185+
return tens[o] + " хиляди";
187186
}
188187

189-
if (d < 100)
188+
if (n < 100)
190189
{
191-
return tens[i] + " хиляди и " + Tens(r);
190+
return tens[o] + " хиляди и " + Tens(of);
192191
}
193192

194-
return Tens(g) + " хиляди " + Hundreds(e);
193+
return Tens(i) + " хиляди " + Hundreds(e);
195194
}
196195

197196

@@ -210,23 +209,23 @@ public static string Convert(decimal number)
210209
return under20[leva] + AppendLvMale; // един лев
211210
}
212211

213-
string levaWords = leva != 1 ? ConvertWholeNumber(leva) + " лева" : "един лев";
212+
string levaWords = leva != 1 ? ConvertWholeNumber(leva) + AppendLvFemale : "един" + AppendLvMale;
214213

215214
string stotinkiWords;
216215

217216
if (leva == 0)
218217
{
219-
if (stotinki == 0) return "нула лева";
218+
if (stotinki == 0) return "нула" + AppendLvFemale;
220219
if (stotinki == 1) return "една" + AppendStotinka;
221220
if (stotinki == 2) return "две" + AppendStotinki;
222221
if (stotinki == 10) return "десет" + AppendStotinki;
223222
if (stotinki < 20) return under20[stotinki] + AppendStotinki;
224223

225-
stotinkiWords = stotinki.ToString() + " ст.";
224+
stotinkiWords = stotinki.ToString() + " " + AppendStotinkaShort;
226225
}
227226
else
228227
{
229-
stotinkiWords = stotinki.ToString() + " ст.";
228+
stotinkiWords = stotinki.ToString() + " " + AppendStotinkaShort;
230229
}
231230

232231
if (leva == 0)

src/Tests/ConvertTests.cs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,25 @@ public class ConvertTests
1010
[InlineData(0, "нула лева")]
1111
[InlineData(1, "един лев")]
1212
[InlineData(2, "два лева")]
13-
[InlineData("2.0", "два лева")]
13+
[InlineData(2.0, "два лева")]
1414
[InlineData(9, "девет лева")]
1515
[InlineData(10, "десет лева")]
1616
[InlineData(11, "единадесет лева")]
1717
[InlineData(12, "дванадесет лева")]
1818
[InlineData(19, "деветнадесет лева")]
19-
[InlineData("0.0", "нула лева")]
20-
[InlineData("0.1", "десет стотинки")]
21-
[InlineData("1.20", "един лев и 20 ст.")]
22-
[InlineData("1.2", "един лев и 20 ст.")]
23-
[InlineData("1.3", "един лев и 30 ст.")]
24-
[InlineData("1.02", "един лев и 2 ст.")]
19+
[InlineData(0.0, "нула лева")]
20+
[InlineData(0.1, "десет стотинки")]
21+
[InlineData(1.20, "един лев и 20 ст.")]
22+
[InlineData(1.2, "един лев и 20 ст.")]
23+
[InlineData(1.3, "един лев и 30 ст.")]
24+
[InlineData(1.02, "един лев и 2 ст.")]
2525
[InlineData(118, "сто и осемнадесет лева")]
2626
[InlineData(123, "сто двадесет и три лева")]
2727
[InlineData(1000, "хиляда лева")]
2828
[InlineData(2000, "две хиляди лева")]
2929
[InlineData(3000, "три хиляди лева")]
3030
[InlineData(9000, "девет хиляди лева")]
31-
[InlineData("123.00", "сто двадесет и три лева")]
31+
[InlineData(123.00, "сто двадесет и три лева")]
3232
[InlineData(1234, "хиляда двеста тридесет и четири лева")]
3333
[InlineData(1234.78, "хиляда двеста тридесет и четири лева и 78 ст.")]
3434
[InlineData(1019.78, "хиляда и деветнадесет лева и 78 ст.")]
@@ -60,7 +60,6 @@ public class ConvertTests
6060
[InlineData(32048.27, "тридесет и две хиляди и четиридесет и осем лева и 27 ст.")]
6161
[InlineData(32008.27, "тридесет и две хиляди и осем лева и 27 ст.")]
6262
[InlineData(99999.99, "деветдесет и девет хиляди деветстотин деветдесет и девет лева и 99 ст.")]
63-
[InlineData(999999.99, "деветстотин деветдесет и девет хиляди деветстотин деветдесет и девет лева и 99 ст.")]
6463
public void NumberToWordsBG_ShouldReturnCorrectWords(decimal number, string expected)
6564
{
6665
// Act
@@ -69,6 +68,5 @@ public void NumberToWordsBG_ShouldReturnCorrectWords(decimal number, string expe
6968
// Assert
7069
Assert.Equal(expected, result);
7170
}
72-
7371
}
7472
}

0 commit comments

Comments
 (0)