Skip to content

Commit 7323e92

Browse files
authored
Merge pull request #4789 from BCSharp/pr/decimal_formatting
Support integer formatting with specifiers D and B
2 parents 63d5f60 + 616c552 commit 7323e92

File tree

3 files changed

+14
-10
lines changed

3 files changed

+14
-10
lines changed

docs/input/docs/reference/custom-formatting.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ assembly-informational-format: "{Major}.{Minor}.{Patch:F2}-{PreReleaseLabel}"
3232
- `C` or `c` (Currency): `{Major:C}` → `"¤1.00"`
3333
- `P` or `p` (Percent): `{CommitsSinceVersionSource:P}` → `"12,345.60 %"`
3434
- `D` or `d` (Decimal): `{Major:D4}` → `"0001"`
35+
- `B` or `b` (Binary): `{Minor:B4}` → `"0101"`
3536
- `X` or `x` (Hexadecimal): `{Patch:X}` → `"FF"`
3637

3738
### Date and Time Formatting

src/GitVersion.Core.Tests/Formatting/NumericFormatterTests.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using GitVersion.Formatting;
1+
using GitVersion.Formatting;
22

33
namespace GitVersion.Tests.Formatting;
44

@@ -21,6 +21,9 @@ public void TryFormat_NullValue_ReturnsFalse()
2121
[TestCase("1234.5678", "f2", "1234.57")]
2222
[TestCase("1234.5678", "f0", "1235")]
2323
[TestCase("1234.5678", "g", "1234.5678")]
24+
[TestCase("1234", "d8", "00001234")]
25+
[TestCase("1234", "x8", "000004d2")]
26+
[TestCase("12", "b8", "00001100")]
2427
public void TryFormat_ValidFormats_ReturnsExpectedResult(string input, string format, string expected)
2528
{
2629
var sut = new NumericFormatter();

src/GitVersion.Core/Formatting/NumericFormatter.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,30 +14,30 @@ public override bool TryFormat(object? value, string format, CultureInfo culture
1414
return false;
1515

1616
// Integer formatting
17-
if (format.All(char.IsDigit) && int.TryParse(s, NumberStyles.Integer, cultureInfo, out var i))
17+
if (format.All(char.IsDigit) && int.TryParse(s, NumberStyles.Integer, cultureInfo, out var integerValue))
1818
{
19-
result = i.ToString(format, cultureInfo);
19+
result = integerValue.ToString(format, cultureInfo);
2020
return true;
2121
}
2222

23-
// Hexadecimal formatting
24-
if (format.StartsWith("X", StringComparison.OrdinalIgnoreCase) && int.TryParse(s, NumberStyles.Integer, cultureInfo, out var hex))
23+
// Integer formatting with precision specifier
24+
if ("BDX".Contains(char.ToUpperInvariant(format[0])) && int.TryParse(s, NumberStyles.Integer, cultureInfo, out var numericValue))
2525
{
26-
result = hex.ToString(format, cultureInfo);
26+
result = numericValue.ToString(format, cultureInfo);
2727
return true;
2828
}
2929

3030
// Floating point formatting
31-
if ("FEGNCP".Contains(char.ToUpperInvariant(format[0])) && double.TryParse(s, NumberStyles.Float | NumberStyles.AllowThousands, cultureInfo, out var d))
31+
if ("FEGNCP".Contains(char.ToUpperInvariant(format[0])) && double.TryParse(s, NumberStyles.Float | NumberStyles.AllowThousands, cultureInfo, out var floatValue))
3232
{
33-
result = d.ToString(format, cultureInfo);
33+
result = floatValue.ToString(format, cultureInfo);
3434
return true;
3535
}
3636

3737
// Decimal formatting
38-
if (decimal.TryParse(s, NumberStyles.Any, cultureInfo, out var dec))
38+
if (decimal.TryParse(s, NumberStyles.Any, cultureInfo, out var decimalValue))
3939
{
40-
result = dec.ToString(format, cultureInfo);
40+
result = decimalValue.ToString(format, cultureInfo);
4141
return true;
4242
}
4343

0 commit comments

Comments
 (0)