From 5f19fd9a7add1d149056fae2b6fcffa2f4b7e6ad Mon Sep 17 00:00:00 2001 From: JamesNK Date: Sun, 4 May 2008 03:16:34 +0000 Subject: [PATCH] -Numbers that contain e should be treated as doubles --- Src/Newtonsoft.Json.Tests/Linq/LinqToJsonTest.cs | 12 ++++++++++++ Src/Newtonsoft.Json/JsonTextReader.cs | 3 ++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Src/Newtonsoft.Json.Tests/Linq/LinqToJsonTest.cs b/Src/Newtonsoft.Json.Tests/Linq/LinqToJsonTest.cs index af976d61..0a226fce 100644 --- a/Src/Newtonsoft.Json.Tests/Linq/LinqToJsonTest.cs +++ b/Src/Newtonsoft.Json.Tests/Linq/LinqToJsonTest.cs @@ -37,6 +37,18 @@ namespace Newtonsoft.Json.Tests.Linq { public class LinqToJsonTest : TestFixtureBase { + [Test] + public void DoubleValue() + { + JArray j = JArray.Parse("[-1E+4,100.0e-2]"); + + double value = (double)j[0]; + Assert.AreEqual(-10000d, value); + + value = (double)j[1]; + Assert.AreEqual(1d, value); + } + [Test] public void Manual() { diff --git a/Src/Newtonsoft.Json/JsonTextReader.cs b/Src/Newtonsoft.Json/JsonTextReader.cs index ec49dae4..02330d6a 100644 --- a/Src/Newtonsoft.Json/JsonTextReader.cs +++ b/Src/Newtonsoft.Json/JsonTextReader.cs @@ -596,7 +596,8 @@ namespace Newtonsoft.Json object numberValue; JsonToken numberType; - if (number.IndexOf('.') == -1) + if (number.IndexOf(".", StringComparison.OrdinalIgnoreCase) == -1 + && number.IndexOf("e", StringComparison.OrdinalIgnoreCase) == -1) { numberValue = Convert.ToInt64(_buffer.ToString(), CultureInfo.InvariantCulture); numberType = JsonToken.Integer;