Skip to content

Commit

Permalink
Fix float parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
taubenangriff committed Jun 8, 2023
1 parent 9e487f0 commit 2634684
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 2 deletions.
18 changes: 16 additions & 2 deletions src/Interpreting/ConverterFunctions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ namespace FileDBReader
public static class ConverterFunctions
{
#region FunctionDictionaries
/// <summary>
/// Conversion Rules: Hex String to their Number Representation.
/// </summary>
public static Dictionary<Type, Func<string, Encoding, String>> ConversionRulesImport = new Dictionary<Type, Func<string, Encoding, String>>
{
{ typeof(bool), (s, Encoding) => PrimitiveTypeConverter.GetObject<bool>(HexHelper.ToBytes(s)).ToString()},
Expand All @@ -26,6 +29,9 @@ public static class ConverterFunctions
{ typeof(String), (s, Encoding) => ToString(s, Encoding)}
};

/// <summary>
/// Conversion Rules: Number Strings to their Hex Representation.
/// </summary>
public static Dictionary<Type, Func<String, Encoding, byte[]>> ConversionRulesExport = new Dictionary<Type, Func<String, Encoding, byte[]>>
{
{ typeof(bool), (s, Encoding) => PrimitiveTypeConverter.GetBytes(bool.Parse(s))},
Expand All @@ -37,8 +43,16 @@ public static class ConverterFunctions
{ typeof(uint), (s, Encoding) => PrimitiveTypeConverter.GetBytes(uint.Parse(s))},
{ typeof(long), (s, Encoding) => PrimitiveTypeConverter.GetBytes(long.Parse(s))},
{ typeof(ulong), (s, Encoding) => PrimitiveTypeConverter.GetBytes(ulong.Parse(s))},
{ typeof(float), (s, Encoding) => PrimitiveTypeConverter.GetBytes(float.Parse(s, CultureInfo.InvariantCulture))},
{ typeof(double), (s, Encoding) => PrimitiveTypeConverter.GetBytes(double.Parse(s))},
{ typeof(float), (s, Encoding) =>
{
var normalized = s.Replace(",", ".");
return PrimitiveTypeConverter.GetBytes(float.Parse(s, CultureInfo.InvariantCulture));
}},
{ typeof(double), (s, Encoding) =>
{
var normalized = s.Replace(",", ".");
return PrimitiveTypeConverter.GetBytes(double.Parse(s, CultureInfo.InvariantCulture));
}},
{ typeof(String), (s, Encoding) => Encoding.GetBytes(s)}
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,22 @@ public void TypeConversion_Test_String()
Assert.IsTrue(StringConversion_Test_Generic(new UTF32Encoding()));
}

[TestMethod]
public void InvariantFloatTests()
{
String float1 = "1.5";
var expected = BitConverter.GetBytes(1.5f);
var parsed = ConverterFunctions.ConversionRulesExport[typeof(float)](float1, Encoding.Unicode);

String float2 = "1,5";
var parsed2 = ConverterFunctions.ConversionRulesExport[typeof(float)](float1, Encoding.Unicode);
for (int i = 0; i < 4; i++)
{
Assert.AreEqual(parsed2[i], expected[i]);
Assert.AreEqual(parsed[i], expected[i]);
}
}

#region HelpfulFunctions
public bool StringConversion_Test_Generic(Encoding e)
{
Expand Down

0 comments on commit 2634684

Please sign in to comment.