This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git


The following commit(s) were added to refs/heads/master by this push:
     new 123360d  Lucene.Net.Queries.Function: Converted types to use invariant 
culture when converting strings to numbers and numbers to strings. (fixes #260)
123360d is described below

commit 123360d41a9188a1bbcd7e4cd76c5589e94b2dcd
Author: Shad Storhaug <[email protected]>
AuthorDate: Tue Jun 2 23:17:15 2020 +0700

    Lucene.Net.Queries.Function: Converted types to use invariant culture when 
converting strings to numbers and numbers to strings. (fixes #260)
---
 .../Function/DocValues/DoubleDocValues.cs          | 11 ++++++-----
 .../Function/DocValues/FloatDocValues.cs           |  5 +++--
 .../Function/DocValues/IntDocValues.cs             | 11 ++++++-----
 .../Function/DocValues/LongDocValues.cs            |  9 +++++----
 src/Lucene.Net.Queries/Function/FunctionValues.cs  |  9 +++++----
 .../Function/ValueSources/ByteFieldSource.cs       |  5 +++--
 .../Function/ValueSources/DocFreqValueSource.cs    |  9 +++++----
 .../ValueSources/DoubleConstValueSource.cs         |  5 +++--
 .../Function/ValueSources/EnumFieldSource.cs       | 22 +++++-----------------
 .../Function/ValueSources/IntFieldSource.cs        |  5 +++--
 .../Function/ValueSources/LinearFloatFunction.cs   | 10 ++++++++--
 .../Function/ValueSources/LongFieldSource.cs       | 11 ++++++-----
 .../ValueSources/ReciprocalFloatFunction.cs        | 17 +++++++++++++----
 .../Function/ValueSources/ScaleFloatFunction.cs    | 11 +++++++++--
 .../Function/ValueSources/ShortFieldSource.cs      |  5 +++--
 15 files changed, 83 insertions(+), 62 deletions(-)

diff --git a/src/Lucene.Net.Queries/Function/DocValues/DoubleDocValues.cs 
b/src/Lucene.Net.Queries/Function/DocValues/DoubleDocValues.cs
index 3ff681a..2142742 100644
--- a/src/Lucene.Net.Queries/Function/DocValues/DoubleDocValues.cs
+++ b/src/Lucene.Net.Queries/Function/DocValues/DoubleDocValues.cs
@@ -1,6 +1,7 @@
 using Lucene.Net.Index;
 using Lucene.Net.Util.Mutable;
 using System;
+using System.Globalization;
 
 namespace Lucene.Net.Queries.Function.DocValues
 {
@@ -78,9 +79,9 @@ namespace Lucene.Net.Queries.Function.DocValues
 
         public override abstract double DoubleVal(int doc);
 
-        public override string StrVal(int doc) // LUCENENET TODO: API - Add 
overload to include CultureInfo ?
+        public override string StrVal(int doc)
         {
-            return Convert.ToString(DoubleVal(doc));
+            return DoubleVal(doc).ToString("R", CultureInfo.InvariantCulture);
         }
 
         public override object ObjectVal(int doc)
@@ -94,7 +95,7 @@ namespace Lucene.Net.Queries.Function.DocValues
         }
 
         public override ValueSourceScorer GetRangeScorer(IndexReader reader, 
string lowerVal, string upperVal,
-            bool includeLower, bool includeUpper) // LUCENENET TODO: API - Add 
overload to include CultureInfo ?
+            bool includeLower, bool includeUpper)
         {
             double lower, upper;
 
@@ -104,7 +105,7 @@ namespace Lucene.Net.Queries.Function.DocValues
             }
             else
             {
-                lower = Convert.ToDouble(lowerVal);
+                lower = Convert.ToDouble(lowerVal, 
CultureInfo.InvariantCulture);
             }
 
             if (upperVal == null)
@@ -113,7 +114,7 @@ namespace Lucene.Net.Queries.Function.DocValues
             }
             else
             {
-                upper = Convert.ToDouble(upperVal);
+                upper = Convert.ToDouble(upperVal, 
CultureInfo.InvariantCulture);
             }
 
             double l = lower;
diff --git a/src/Lucene.Net.Queries/Function/DocValues/FloatDocValues.cs 
b/src/Lucene.Net.Queries/Function/DocValues/FloatDocValues.cs
index 8f41e3c..dd1a82d 100644
--- a/src/Lucene.Net.Queries/Function/DocValues/FloatDocValues.cs
+++ b/src/Lucene.Net.Queries/Function/DocValues/FloatDocValues.cs
@@ -1,5 +1,6 @@
 using Lucene.Net.Util.Mutable;
 using System;
+using System.Globalization;
 
 namespace Lucene.Net.Queries.Function.DocValues
 {
@@ -74,9 +75,9 @@ namespace Lucene.Net.Queries.Function.DocValues
             return (double)SingleVal(doc);
         }
 
-        public override string StrVal(int doc) // LUCENENET TODO: API - Add 
overload to include CultureInfo ?
+        public override string StrVal(int doc)
         {
-            return Convert.ToString(SingleVal(doc));
+            return SingleVal(doc).ToString("R", CultureInfo.InvariantCulture);
         }
 
         public override object ObjectVal(int doc)
diff --git a/src/Lucene.Net.Queries/Function/DocValues/IntDocValues.cs 
b/src/Lucene.Net.Queries/Function/DocValues/IntDocValues.cs
index 7daf3ac..177c249 100644
--- a/src/Lucene.Net.Queries/Function/DocValues/IntDocValues.cs
+++ b/src/Lucene.Net.Queries/Function/DocValues/IntDocValues.cs
@@ -1,6 +1,7 @@
 using Lucene.Net.Index;
 using Lucene.Net.Util.Mutable;
 using System;
+using System.Globalization;
 
 namespace Lucene.Net.Queries.Function.DocValues
 {
@@ -75,9 +76,9 @@ namespace Lucene.Net.Queries.Function.DocValues
             return (double)Int32Val(doc);
         }
 
-        public override string StrVal(int doc) // LUCENENET TODO: API - Add 
overload to include CultureInfo ?
+        public override string StrVal(int doc)
         {
-            return Convert.ToString(Int32Val(doc));
+            return Int32Val(doc).ToString(CultureInfo.InvariantCulture);
         }
 
         public override object ObjectVal(int doc)
@@ -90,7 +91,7 @@ namespace Lucene.Net.Queries.Function.DocValues
             return m_vs.GetDescription() + '=' + StrVal(doc);
         }
 
-        public override ValueSourceScorer GetRangeScorer(IndexReader reader, 
string lowerVal, string upperVal, bool includeLower, bool includeUpper) // 
LUCENENET TODO: API - Add overload to include CultureInfo ?
+        public override ValueSourceScorer GetRangeScorer(IndexReader reader, 
string lowerVal, string upperVal, bool includeLower, bool includeUpper)
         {
             int lower, upper;
 
@@ -102,7 +103,7 @@ namespace Lucene.Net.Queries.Function.DocValues
             }
             else
             {
-                lower = Convert.ToInt32(lowerVal);
+                lower = Convert.ToInt32(lowerVal, 
CultureInfo.InvariantCulture);
                 if (!includeLower && lower < int.MaxValue)
                 {
                     lower++;
@@ -115,7 +116,7 @@ namespace Lucene.Net.Queries.Function.DocValues
             }
             else
             {
-                upper = Convert.ToInt32(upperVal);
+                upper = Convert.ToInt32(upperVal, 
CultureInfo.InvariantCulture);
                 if (!includeUpper && upper > int.MinValue)
                 {
                     upper--;
diff --git a/src/Lucene.Net.Queries/Function/DocValues/LongDocValues.cs 
b/src/Lucene.Net.Queries/Function/DocValues/LongDocValues.cs
index 49f0a73..f703716 100644
--- a/src/Lucene.Net.Queries/Function/DocValues/LongDocValues.cs
+++ b/src/Lucene.Net.Queries/Function/DocValues/LongDocValues.cs
@@ -1,6 +1,7 @@
 using Lucene.Net.Index;
 using Lucene.Net.Util.Mutable;
 using System;
+using System.Globalization;
 
 namespace Lucene.Net.Queries.Function.DocValues
 {
@@ -77,9 +78,9 @@ namespace Lucene.Net.Queries.Function.DocValues
             return Int64Val(doc) != 0;
         }
 
-        public override string StrVal(int doc) // LUCENENET TODO: API - Add 
overload to include CultureInfo ?
+        public override string StrVal(int doc)
         {
-            return Convert.ToString(Int64Val(doc));
+            return Int64Val(doc).ToString(CultureInfo.InvariantCulture);
         }
 
         public override object ObjectVal(int doc)
@@ -95,9 +96,9 @@ namespace Lucene.Net.Queries.Function.DocValues
         /// <summary>
         /// NOTE: This was externalToLong() in Lucene
         /// </summary>
-        protected virtual long ExternalToInt64(string extVal) // LUCENENET 
TODO: API - Add overload to include CultureInfo ?
+        protected virtual long ExternalToInt64(string extVal)
         {
-            return Convert.ToInt64(extVal);
+            return Convert.ToInt64(extVal, CultureInfo.InvariantCulture);
         }
 
         public override ValueSourceScorer GetRangeScorer(IndexReader reader, 
string lowerVal, string upperVal, bool includeLower, bool includeUpper)
diff --git a/src/Lucene.Net.Queries/Function/FunctionValues.cs 
b/src/Lucene.Net.Queries/Function/FunctionValues.cs
index bbcc976..3e2d084 100644
--- a/src/Lucene.Net.Queries/Function/FunctionValues.cs
+++ b/src/Lucene.Net.Queries/Function/FunctionValues.cs
@@ -1,4 +1,5 @@
 using System;
+using System.Globalization;
 using Lucene.Net.Index;
 using Lucene.Net.Search;
 using Lucene.Net.Util;
@@ -230,7 +231,7 @@ namespace Lucene.Net.Queries.Function
         }
 
         // TODO: should we make a termVal, fills BytesRef[]?
-        public virtual void StrVal(int doc, string[] vals) // LUCENENET TODO: 
API - Add overload to include CultureInfo ?
+        public virtual void StrVal(int doc, string[] vals)
         {
             throw new System.NotSupportedException();
         }
@@ -250,7 +251,7 @@ namespace Lucene.Net.Queries.Function
         // a setup cost - parsing and normalizing params, and doing a binary 
search on the StringIndex.
         // TODO: change "reader" to AtomicReaderContext
         public virtual ValueSourceScorer GetRangeScorer(IndexReader reader, 
string lowerVal, string upperVal,
-            bool includeLower, bool includeUpper) // LUCENENET TODO: API - Add 
overload to include CultureInfo ?
+            bool includeLower, bool includeUpper)
         {
             float lower;
             float upper;
@@ -261,7 +262,7 @@ namespace Lucene.Net.Queries.Function
             }
             else
             {
-                lower = Convert.ToSingle(lowerVal);
+                lower = Convert.ToSingle(lowerVal, 
CultureInfo.InvariantCulture);
             }
             if (upperVal == null)
             {
@@ -269,7 +270,7 @@ namespace Lucene.Net.Queries.Function
             }
             else
             {
-                upper = Convert.ToSingle(upperVal);
+                upper = Convert.ToSingle(upperVal, 
CultureInfo.InvariantCulture);
             }
 
             float l = lower;
diff --git a/src/Lucene.Net.Queries/Function/ValueSources/ByteFieldSource.cs 
b/src/Lucene.Net.Queries/Function/ValueSources/ByteFieldSource.cs
index 4a339b6..2450fde 100644
--- a/src/Lucene.Net.Queries/Function/ValueSources/ByteFieldSource.cs
+++ b/src/Lucene.Net.Queries/Function/ValueSources/ByteFieldSource.cs
@@ -2,6 +2,7 @@
 using Lucene.Net.Search;
 using System;
 using System.Collections;
+using System.Globalization;
 
 namespace Lucene.Net.Queries.Function.ValueSources
 {
@@ -108,9 +109,9 @@ namespace Lucene.Net.Queries.Function.ValueSources
                 return (double)(sbyte)arr.Get(doc);
             }
 
-            public override string StrVal(int doc) // LUCENENET TODO: API - 
Add overload to include CultureInfo ?
+            public override string StrVal(int doc)
             {
-                return Convert.ToString((sbyte)arr.Get(doc));
+                return Convert.ToString((sbyte)arr.Get(doc), 
CultureInfo.InvariantCulture);
             }
 
             public override string ToString(int doc)
diff --git a/src/Lucene.Net.Queries/Function/ValueSources/DocFreqValueSource.cs 
b/src/Lucene.Net.Queries/Function/ValueSources/DocFreqValueSource.cs
index b622d7a..f277a97 100644
--- a/src/Lucene.Net.Queries/Function/ValueSources/DocFreqValueSource.cs
+++ b/src/Lucene.Net.Queries/Function/ValueSources/DocFreqValueSource.cs
@@ -4,6 +4,7 @@ using Lucene.Net.Search;
 using Lucene.Net.Util;
 using System;
 using System.Collections;
+using System.Globalization;
 
 namespace Lucene.Net.Queries.Function.ValueSources
 {
@@ -36,14 +37,14 @@ namespace Lucene.Net.Queries.Function.ValueSources
         internal readonly string sval;
         internal readonly ValueSource parent;
 
-        internal ConstInt32DocValues(int val, ValueSource parent) // LUCENENET 
TODO: API - Add overload to include CultureInfo ?
+        internal ConstInt32DocValues(int val, ValueSource parent)
             : base(parent)
         {
             ival = val;
             fval = val;
             dval = val;
             lval = val;
-            sval = Convert.ToString(val);
+            sval = Convert.ToString(val, CultureInfo.InvariantCulture);
             this.parent = parent;
         }
 
@@ -93,14 +94,14 @@ namespace Lucene.Net.Queries.Function.ValueSources
         internal readonly string sval;
         internal readonly ValueSource parent;
 
-        internal ConstDoubleDocValues(double val, ValueSource parent) // 
LUCENENET TODO: API - Add overload to include CultureInfo ?
+        internal ConstDoubleDocValues(double val, ValueSource parent)
             : base(parent)
         {
             ival = (int)val;
             fval = (float)val;
             dval = val;
             lval = (long)val;
-            sval = Convert.ToString(val);
+            sval = val.ToString("R", CultureInfo.InvariantCulture);
             this.parent = parent;
         }
 
diff --git 
a/src/Lucene.Net.Queries/Function/ValueSources/DoubleConstValueSource.cs 
b/src/Lucene.Net.Queries/Function/ValueSources/DoubleConstValueSource.cs
index 1cabe68..9353af8 100644
--- a/src/Lucene.Net.Queries/Function/ValueSources/DoubleConstValueSource.cs
+++ b/src/Lucene.Net.Queries/Function/ValueSources/DoubleConstValueSource.cs
@@ -2,6 +2,7 @@
 using Lucene.Net.Queries.Function.DocValues;
 using System;
 using System.Collections;
+using System.Globalization;
 
 namespace Lucene.Net.Queries.Function.ValueSources
 {
@@ -87,9 +88,9 @@ namespace Lucene.Net.Queries.Function.ValueSources
                 return outerInstance.constant;
             }
 
-            public override string StrVal(int doc) // LUCENENET TODO: API - 
Add overload to include CultureInfo ?
+            public override string StrVal(int doc)
             {
-                return Convert.ToString(outerInstance.constant);
+                return outerInstance.constant.ToString("R", 
CultureInfo.InvariantCulture);
             }
 
             public override object ObjectVal(int doc)
diff --git a/src/Lucene.Net.Queries/Function/ValueSources/EnumFieldSource.cs 
b/src/Lucene.Net.Queries/Function/ValueSources/EnumFieldSource.cs
index 34ef599..3ae9fe3 100644
--- a/src/Lucene.Net.Queries/Function/ValueSources/EnumFieldSource.cs
+++ b/src/Lucene.Net.Queries/Function/ValueSources/EnumFieldSource.cs
@@ -48,20 +48,12 @@ namespace Lucene.Net.Queries.Function.ValueSources
             this.enumStringToIntMap = enumStringToIntMap;
         }
 
-        /// <summary>
-        /// NOTE: This was tryParseInt() in Lucene
-        /// </summary>
-        private static int? TryParseInt32(string valueStr) // LUCENENET TODO: 
API - Add overload to include CultureInfo ?
-        {
-            if (int.TryParse(valueStr, out int intValue))
-                return intValue;
-            return null;
-        }
+        // LUCENENET specific - removed TryParseInt in favor of int.TryParse()
 
         /// <summary>
         /// NOTE: This was intValueToStringValue() in Lucene
         /// </summary>
-        private string Int32ValueToStringValue(int? intVal) // LUCENENET TODO: 
API - Add overload to include CultureInfo
+        private string Int32ValueToStringValue(int? intVal)
         {
             if (intVal == null)
             {
@@ -80,14 +72,13 @@ namespace Lucene.Net.Queries.Function.ValueSources
         /// <summary>
         /// NOTE: This was stringValueToIntValue() in Lucene
         /// </summary>
-        private int? StringValueToInt32Value(string stringVal) // LUCENENET 
TODO: API - Add overload to include CultureInfo
+        private int? StringValueToInt32Value(string stringVal)
         {
             if (stringVal == null)
             {
                 return null;
             }
 
-            int? intValue;
             int? enumInt = enumStringToIntMap[stringVal];
             if (enumInt != null) //enum int found for str
             {
@@ -95,8 +86,7 @@ namespace Lucene.Net.Queries.Function.ValueSources
             }
 
             //enum int not found for str
-            intValue = TryParseInt32(stringVal);
-            if (intValue == null) //not Integer
+            if (!int.TryParse(stringVal, NumberStyles.Integer, 
CultureInfo.InvariantCulture, out int intValue)) //not Integer
             {
                 intValue = DEFAULT_VALUE;
             }
@@ -192,7 +182,7 @@ namespace Lucene.Net.Queries.Function.ValueSources
             }
 
 
-            public override ValueSourceScorer GetRangeScorer(IndexReader 
reader, string lowerVal, string upperVal, bool includeLower, bool includeUpper) 
// LUCENENET TODO: API - Add overload to include CultureInfo ?
+            public override ValueSourceScorer GetRangeScorer(IndexReader 
reader, string lowerVal, string upperVal, bool includeLower, bool includeUpper)
             {
                 int? lower = outerInstance.StringValueToInt32Value(lowerVal);
                 int? upper = outerInstance.StringValueToInt32Value(upperVal);
@@ -291,6 +281,4 @@ namespace Lucene.Net.Queries.Function.ValueSources
             return result;
         }
     }
-
-
 }
\ No newline at end of file
diff --git a/src/Lucene.Net.Queries/Function/ValueSources/IntFieldSource.cs 
b/src/Lucene.Net.Queries/Function/ValueSources/IntFieldSource.cs
index f88c629..2cd5186 100644
--- a/src/Lucene.Net.Queries/Function/ValueSources/IntFieldSource.cs
+++ b/src/Lucene.Net.Queries/Function/ValueSources/IntFieldSource.cs
@@ -5,6 +5,7 @@ using Lucene.Net.Util;
 using Lucene.Net.Util.Mutable;
 using System;
 using System.Collections;
+using System.Globalization;
 
 namespace Lucene.Net.Queries.Function.ValueSources
 {
@@ -106,9 +107,9 @@ namespace Lucene.Net.Queries.Function.ValueSources
                 return (double)arr.Get(doc);
             }
 
-            public override string StrVal(int doc) // LUCENENET TODO: API - 
Add overload to include CultureInfo ?
+            public override string StrVal(int doc)
             {
-                return Convert.ToString(arr.Get(doc));
+                return Convert.ToString(arr.Get(doc), 
CultureInfo.InvariantCulture);
             }
 
             public override object ObjectVal(int doc)
diff --git 
a/src/Lucene.Net.Queries/Function/ValueSources/LinearFloatFunction.cs 
b/src/Lucene.Net.Queries/Function/ValueSources/LinearFloatFunction.cs
index da63ee9..64ff15a 100644
--- a/src/Lucene.Net.Queries/Function/ValueSources/LinearFloatFunction.cs
+++ b/src/Lucene.Net.Queries/Function/ValueSources/LinearFloatFunction.cs
@@ -2,6 +2,7 @@
 using Lucene.Net.Queries.Function.DocValues;
 using Lucene.Net.Search;
 using System.Collections;
+using System.Globalization;
 
 namespace Lucene.Net.Queries.Function.ValueSources
 {
@@ -73,9 +74,14 @@ namespace Lucene.Net.Queries.Function.ValueSources
             {
                 return vals.SingleVal(doc) * outerInstance.m_slope + 
outerInstance.m_intercept;
             }
-            public override string ToString(int doc) // LUCENENET TODO: API - 
Add overload to include CultureInfo ?
+
+            public override string ToString(int doc)
             {
-                return outerInstance.m_slope + "*float(" + vals.ToString(doc) 
+ ")+" + outerInstance.m_intercept;
+                // LUCENENET specific - changed formatting to ensure the same 
culture is used for each value.
+                return string.Format("{0}*float({1})+{2}",
+                    outerInstance.m_slope,
+                    vals.ToString(doc),
+                    outerInstance.m_intercept);
             }
         }
 
diff --git a/src/Lucene.Net.Queries/Function/ValueSources/LongFieldSource.cs 
b/src/Lucene.Net.Queries/Function/ValueSources/LongFieldSource.cs
index 0a48be7..b9882db 100644
--- a/src/Lucene.Net.Queries/Function/ValueSources/LongFieldSource.cs
+++ b/src/Lucene.Net.Queries/Function/ValueSources/LongFieldSource.cs
@@ -5,6 +5,7 @@ using Lucene.Net.Util;
 using Lucene.Net.Util.Mutable;
 using System;
 using System.Collections;
+using System.Globalization;
 
 namespace Lucene.Net.Queries.Function.ValueSources
 {
@@ -54,9 +55,9 @@ namespace Lucene.Net.Queries.Function.ValueSources
         /// <summary>
         /// NOTE: This was externalToLong() in Lucene
         /// </summary>
-        public virtual long ExternalToInt64(string extVal) // LUCENENET TODO: 
API - Add overload to include CultureInfo ?
+        public virtual long ExternalToInt64(string extVal)
         {
-            return Convert.ToInt64(extVal);
+            return Convert.ToInt64(extVal, CultureInfo.InvariantCulture);
         }
 
         /// <summary>
@@ -70,9 +71,9 @@ namespace Lucene.Net.Queries.Function.ValueSources
         /// <summary>
         /// NOTE: This was longToString() in Lucene
         /// </summary>
-        public virtual string Int64ToString(long val) // LUCENENET TODO: API - 
Add overload to include CultureInfo ?
+        public virtual string Int64ToString(long val)
         {
-            return Int64ToObject(val).ToString();
+            return string.Format(CultureInfo.InvariantCulture, "{0}", 
Int64ToObject(val));
         }
 
         public override FunctionValues GetValues(IDictionary context, 
AtomicReaderContext readerContext)
@@ -115,7 +116,7 @@ namespace Lucene.Net.Queries.Function.ValueSources
                 return valid.Get(doc) ? 
outerInstance.Int64ToObject(arr.Get(doc)) : null;
             }
 
-            public override string StrVal(int doc) // LUCENENET TODO: API - 
Add overload to include CultureInfo ?
+            public override string StrVal(int doc)
             {
                 return valid.Get(doc) ? 
outerInstance.Int64ToString(arr.Get(doc)) : null;
             }
diff --git 
a/src/Lucene.Net.Queries/Function/ValueSources/ReciprocalFloatFunction.cs 
b/src/Lucene.Net.Queries/Function/ValueSources/ReciprocalFloatFunction.cs
index fb3fc15..6d16c43 100644
--- a/src/Lucene.Net.Queries/Function/ValueSources/ReciprocalFloatFunction.cs
+++ b/src/Lucene.Net.Queries/Function/ValueSources/ReciprocalFloatFunction.cs
@@ -3,6 +3,7 @@ using Lucene.Net.Queries.Function.DocValues;
 using Lucene.Net.Search;
 using System;
 using System.Collections;
+using System.Globalization;
 
 namespace Lucene.Net.Queries.Function.ValueSources
 {
@@ -82,9 +83,15 @@ namespace Lucene.Net.Queries.Function.ValueSources
             {
                 return outerInstance.m_a / (outerInstance.m_m * 
vals.SingleVal(doc) + outerInstance.m_b);
             }
-            public override string ToString(int doc) // LUCENENET TODO: API - 
Add overload to include CultureInfo ?
+
+            public override string ToString(int doc)
             {
-                return Convert.ToString(outerInstance.m_a) + "/(" + 
outerInstance.m_m + "*float(" + vals.ToString(doc) + ')' + '+' + 
outerInstance.m_b + ')';
+                // LUCENENET specific - changed formatting to ensure the same 
culture is used for each value.
+                return string.Format(CultureInfo.InvariantCulture, 
"{0}/({1}*float({2})+{3})",
+                    outerInstance.m_a,
+                    outerInstance.m_m,
+                    vals.ToString(doc),
+                    outerInstance.m_b);
             }
         }
 
@@ -93,9 +100,11 @@ namespace Lucene.Net.Queries.Function.ValueSources
             m_source.CreateWeight(context, searcher);
         }
 
-        public override string GetDescription() // LUCENENET TODO: API - Add 
overload to include CultureInfo ?
+        public override string GetDescription()
         {
-            return Convert.ToString(m_a) + "/(" + m_m + "*float(" + 
m_source.GetDescription() + ")" + "+" + m_b + ')';
+            return m_a.ToString(CultureInfo.InvariantCulture) + 
+                "/(" + m_m.ToString(CultureInfo.InvariantCulture) + 
+                "*float(" + m_source.GetDescription() + ")" + "+" + 
m_b.ToString(CultureInfo.InvariantCulture) + ')';
         }
 
         public override int GetHashCode()
diff --git a/src/Lucene.Net.Queries/Function/ValueSources/ScaleFloatFunction.cs 
b/src/Lucene.Net.Queries/Function/ValueSources/ScaleFloatFunction.cs
index 9f16cf0..e711b7a 100644
--- a/src/Lucene.Net.Queries/Function/ValueSources/ScaleFloatFunction.cs
+++ b/src/Lucene.Net.Queries/Function/ValueSources/ScaleFloatFunction.cs
@@ -2,6 +2,7 @@
 using Lucene.Net.Queries.Function.DocValues;
 using Lucene.Net.Search;
 using System.Collections;
+using System.Globalization;
 
 namespace Lucene.Net.Queries.Function.ValueSources
 {
@@ -145,9 +146,15 @@ namespace Lucene.Net.Queries.Function.ValueSources
             {
                 return (vals.SingleVal(doc) - minSource) * scale + 
outerInstance.m_min;
             }
-            public override string ToString(int doc) // LUCENENET TODO: API - 
Add overload to include CultureInfo ?
+
+            public override string ToString(int doc)
             {
-                return "scale(" + vals.ToString(doc) + ",toMin=" + 
outerInstance.m_min + ",toMax=" + outerInstance.m_max + ",fromMin=" + minSource 
+ ",fromMax=" + maxSource + ")";
+                // LUCENENET specific - changed formatting to ensure the same 
culture is used for each value.
+                return string.Format(CultureInfo.InvariantCulture, 
"scale({0},toMin={1},toMax={2},fromMin={3})", 
+                    vals.ToString(doc),
+                    outerInstance.m_min,
+                    outerInstance.m_max,
+                    maxSource);
             }
         }
 
diff --git a/src/Lucene.Net.Queries/Function/ValueSources/ShortFieldSource.cs 
b/src/Lucene.Net.Queries/Function/ValueSources/ShortFieldSource.cs
index 72ac0d8..0bc6504 100644
--- a/src/Lucene.Net.Queries/Function/ValueSources/ShortFieldSource.cs
+++ b/src/Lucene.Net.Queries/Function/ValueSources/ShortFieldSource.cs
@@ -2,6 +2,7 @@
 using Lucene.Net.Search;
 using System;
 using System.Collections;
+using System.Globalization;
 
 namespace Lucene.Net.Queries.Function.ValueSources
 {
@@ -109,9 +110,9 @@ namespace Lucene.Net.Queries.Function.ValueSources
                 return arr.Get(doc);
             }
 
-            public override string StrVal(int doc) // LUCENENET TODO: API - 
Add overload to include CultureInfo ?
+            public override string StrVal(int doc)
             {
-                return Convert.ToString(arr.Get(doc));
+                return Convert.ToString(arr.Get(doc), 
CultureInfo.InvariantCulture);
             }
 
             public override string ToString(int doc)

Reply via email to