From abb6afc29f1e22926722b69ace6bf6cfede77fb8 Mon Sep 17 00:00:00 2001
From: Alexander Emelyanov <35880220+Homosanians@users.noreply.github.com>
Date: Tue, 28 Jan 2025 19:59:27 +0300
Subject: [PATCH] Fix Coins not parsing with Invariant Culture
---
TonSdk.Core/src/Coins.cs | 35 +++++++++++++++++++----
TonSdk.Core/test/TonSdk.Core.Tests.csproj | 2 ++
2 files changed, 31 insertions(+), 6 deletions(-)
diff --git a/TonSdk.Core/src/Coins.cs b/TonSdk.Core/src/Coins.cs
index 05d56a0..15694c2 100644
--- a/TonSdk.Core/src/Coins.cs
+++ b/TonSdk.Core/src/Coins.cs
@@ -256,12 +256,26 @@ private static bool TryConvertCoinsValue(object value, out decimal result)
result = (decimal)doubleValue;
return true;
}
+ }
+ catch (CultureNotFoundException)
+ {
+ if (decimal.TryParse(value.ToString(), NumberStyles.Any, CultureInfo.InvariantCulture, out result))
+ {
+ return true;
+ }
- return false;
+ double doubleValue;
+ if (double.TryParse(value.ToString(), NumberStyles.Any, CultureInfo.InvariantCulture, out doubleValue))
+ {
+ result = (decimal)doubleValue;
+ return true;
+ }
}
catch {
return false;
}
+
+ return false;
}
private static bool IsCoins(object value) {
@@ -269,12 +283,21 @@ private static bool IsCoins(object value) {
}
private static int GetDigitsAfterDecimalPoint(decimal number) {
- string[] parts = number.ToString(new CultureInfo("en-US")).Split('.');
- if (parts.Length == 2) {
- return parts[1].Length;
+ try
+ {
+ string[] parts = number.ToString(new CultureInfo("en-US")).Split('.');
+ if (parts.Length == 2)
+ return parts[1].Length;
+ else
+ return 0;
}
- else {
- return 0;
+ catch (CultureNotFoundException)
+ {
+ string[] parts = number.ToString(CultureInfo.InvariantCulture).Split('.');
+ if (parts.Length == 2)
+ return parts[1].Length;
+ else
+ return 0;
}
}
diff --git a/TonSdk.Core/test/TonSdk.Core.Tests.csproj b/TonSdk.Core/test/TonSdk.Core.Tests.csproj
index 28e7ed8..5bb4a69 100644
--- a/TonSdk.Core/test/TonSdk.Core.Tests.csproj
+++ b/TonSdk.Core/test/TonSdk.Core.Tests.csproj
@@ -6,6 +6,8 @@
enable
TonSdk.Core.Tests
+ true
+
false
true