From b861a94652884673d5b5f3768b2feac1a25e77f9 Mon Sep 17 00:00:00 2001 From: pixelshade Date: Tue, 17 Nov 2015 21:31:26 +0100 Subject: [PATCH 1/5] Decimal number separator fix Set globally in constructor --- source/Assets/Scripts/InfinarioSDK/Infinario.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/Assets/Scripts/InfinarioSDK/Infinario.cs b/source/Assets/Scripts/InfinarioSDK/Infinario.cs index 2a62c6d..a08df1c 100644 --- a/source/Assets/Scripts/InfinarioSDK/Infinario.cs +++ b/source/Assets/Scripts/InfinarioSDK/Infinario.cs @@ -15,6 +15,11 @@ private Infinario() { //Prepare for wrappers implementation = new SDK.Unity (); + + //Setup decimal separator for numbers + var customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone(); + customCulture.NumberFormat.NumberDecimalSeparator = "."; + System.Threading.Thread.CurrentThread.CurrentCulture = customCulture; } public static Infinario GetInstance() From 0737e786c0216e5b0f9518e930f9125ec13f1067 Mon Sep 17 00:00:00 2001 From: pixelshade Date: Wed, 18 Nov 2015 11:12:40 +0100 Subject: [PATCH 2/5] Tabs as indentation, better comment. Using tabs instead of spaces. Added more info about issue fix in the comment. --- source/Assets/Scripts/InfinarioSDK/Infinario.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/source/Assets/Scripts/InfinarioSDK/Infinario.cs b/source/Assets/Scripts/InfinarioSDK/Infinario.cs index a08df1c..f635b68 100644 --- a/source/Assets/Scripts/InfinarioSDK/Infinario.cs +++ b/source/Assets/Scripts/InfinarioSDK/Infinario.cs @@ -16,10 +16,11 @@ private Infinario() //Prepare for wrappers implementation = new SDK.Unity (); - //Setup decimal separator for numbers - var customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone(); - customCulture.NumberFormat.NumberDecimalSeparator = "."; - System.Threading.Thread.CurrentThread.CurrentCulture = customCulture; + //Setup decimal separator for numbers. This was an issue when timestamp was converted + //to string in json on some systems which used "," as decimal separator + var customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone(); + customCulture.NumberFormat.NumberDecimalSeparator = "."; + System.Threading.Thread.CurrentThread.CurrentCulture = customCulture; } public static Infinario GetInstance() From 532712db89d1f1343a6067e4c2daa8a90aa5898e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Culi=CC=81k?= Date: Wed, 18 Nov 2015 14:22:55 +0100 Subject: [PATCH 3/5] Invariant culture set in double converting to string MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Invariant culture set in double converting to string in miniJSON due to system locale bug where “,” decimal separator was used instead of “.” --- source/Assets/Scripts/InfinarioSDK/Infinario.cs | 6 ------ source/Assets/Scripts/InfinarioSDK/MiniJSON.cs | 4 +++- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/source/Assets/Scripts/InfinarioSDK/Infinario.cs b/source/Assets/Scripts/InfinarioSDK/Infinario.cs index f635b68..2a62c6d 100644 --- a/source/Assets/Scripts/InfinarioSDK/Infinario.cs +++ b/source/Assets/Scripts/InfinarioSDK/Infinario.cs @@ -15,12 +15,6 @@ private Infinario() { //Prepare for wrappers implementation = new SDK.Unity (); - - //Setup decimal separator for numbers. This was an issue when timestamp was converted - //to string in json on some systems which used "," as decimal separator - var customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone(); - customCulture.NumberFormat.NumberDecimalSeparator = "."; - System.Threading.Thread.CurrentThread.CurrentCulture = customCulture; } public static Infinario GetInstance() diff --git a/source/Assets/Scripts/InfinarioSDK/MiniJSON.cs b/source/Assets/Scripts/InfinarioSDK/MiniJSON.cs index 993f3b3..b84942f 100644 --- a/source/Assets/Scripts/InfinarioSDK/MiniJSON.cs +++ b/source/Assets/Scripts/InfinarioSDK/MiniJSON.cs @@ -31,6 +31,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using System.Globalization; namespace Infinario.MiniJSON { // Example usage: @@ -537,7 +538,8 @@ void SerializeOther(object value) { builder.Append(value); } else if (value is double || value is decimal) { - builder.Append(Convert.ToDouble(value).ToString("R")); + + builder.Append(Convert.ToDouble(value).ToString("R", CultureInfo.InvariantCulture)); } else { SerializeString(value.ToString()); } From fafce3c38393ac02a5cc1cc1d430276ba5463288 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Culi=CC=81k?= Date: Wed, 18 Nov 2015 14:33:04 +0100 Subject: [PATCH 4/5] Culture info set invariant, separator set to dot Its questionable if its ok to call it in method everytime --- source/Assets/Scripts/InfinarioSDK/MiniJSON.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/Assets/Scripts/InfinarioSDK/MiniJSON.cs b/source/Assets/Scripts/InfinarioSDK/MiniJSON.cs index b84942f..4f500da 100644 --- a/source/Assets/Scripts/InfinarioSDK/MiniJSON.cs +++ b/source/Assets/Scripts/InfinarioSDK/MiniJSON.cs @@ -538,8 +538,9 @@ void SerializeOther(object value) { builder.Append(value); } else if (value is double || value is decimal) { - - builder.Append(Convert.ToDouble(value).ToString("R", CultureInfo.InvariantCulture)); + var cultureInfoWithDotSeparator = CultureInfo.InvariantCulture.Clone() as CultureInfo; + cultureInfoWithDotSeparator.NumberFormat.NumberDecimalSeparator = "."; + builder.Append(Convert.ToDouble(value).ToString("R", cultureInfoWithDotSeparator)); } else { SerializeString(value.ToString()); } From c932354f8cbf7df0a8a1e9608fa06cc287dbfb43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Culi=CC=81k?= Date: Wed, 18 Nov 2015 15:41:07 +0100 Subject: [PATCH 5/5] Decimal conversion using Invariant Culture with R param MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Decimal conversion using Invariant Culture with R parameter that should be enough to fix problem with “,” in decimals in some cultures --- source/Assets/Scripts/InfinarioSDK/MiniJSON.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/Assets/Scripts/InfinarioSDK/MiniJSON.cs b/source/Assets/Scripts/InfinarioSDK/MiniJSON.cs index 4f500da..7b66329 100644 --- a/source/Assets/Scripts/InfinarioSDK/MiniJSON.cs +++ b/source/Assets/Scripts/InfinarioSDK/MiniJSON.cs @@ -538,9 +538,7 @@ void SerializeOther(object value) { builder.Append(value); } else if (value is double || value is decimal) { - var cultureInfoWithDotSeparator = CultureInfo.InvariantCulture.Clone() as CultureInfo; - cultureInfoWithDotSeparator.NumberFormat.NumberDecimalSeparator = "."; - builder.Append(Convert.ToDouble(value).ToString("R", cultureInfoWithDotSeparator)); + builder.Append(Convert.ToDouble(value).ToString("R", CultureInfo.InvariantCulture)); } else { SerializeString(value.ToString()); }