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