Skip to content

Commit 0172dc5

Browse files
committed
Add OptionForceIntegerNumbersEvaluationsAsDoubleByDefault + tests
1 parent 8c24a98 commit 0172dc5

File tree

2 files changed

+40
-12
lines changed

2 files changed

+40
-12
lines changed

CodingSeb.ExpressionEvaluator.Tests/ExpressionEvaluatorTests.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1474,11 +1474,40 @@ public static IEnumerable<TestCaseData> TestCasesEvaluateWithSpecificEvaluator
14741474
.SetCategory("Numbers Culture");
14751475

14761476
#endregion
1477+
1478+
#region Force Integer numbers default type
1479+
1480+
yield return new TestCaseData(new ExpressionEvaluator()
1481+
, "(130-120)/(2*250)")
1482+
.Returns(0)
1483+
.SetCategory("Options")
1484+
.SetCategory("Integer Numbers default types");
1485+
1486+
yield return new TestCaseData(new ExpressionEvaluator
1487+
{
1488+
OptionForceIntegerNumbersEvaluationsAsDoubleByDefault = false
1489+
}
1490+
, "(130-120)/(2*250)")
1491+
.Returns(0)
1492+
.SetCategory("Options")
1493+
.SetCategory("Integer Numbers default types");
1494+
1495+
yield return new TestCaseData(new ExpressionEvaluator
1496+
{
1497+
OptionForceIntegerNumbersEvaluationsAsDoubleByDefault = true
1498+
}
1499+
, "(130-120)/(2*250)")
1500+
.Returns(0.02)
1501+
.SetCategory("Options")
1502+
.SetCategory("Integer Numbers default types");
1503+
1504+
#endregion
14771505
}
14781506
}
14791507

14801508
#endregion
14811509

1510+
14821511
[TestCaseSource(nameof(TestCasesEvaluateWithSpecificEvaluator))]
14831512
public object EvaluateWithSpecificEvaluator(ExpressionEvaluator evaluator, string expression)
14841513
{

CodingSeb.ExpressionEvaluator/ExpressionEvaluator.cs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/******************************************************************************************************
22
Title : ExpressionEvaluator (https://github.com/codingseb/ExpressionEvaluator)
3-
Version : 1.3.4.1
3+
Version : 1.3.4.2
44
(if last digit (the forth) is not a zero, the version is an intermediate version and can be unstable)
55
66
Author : Coding Seb
@@ -527,6 +527,13 @@ private StringComparer StringComparerForCasing
527527
}
528528
}
529529

530+
/// <summary>
531+
/// If <c>true</c> all numbers evaluations will be done as double without suffixes
532+
/// If <c>false</c> Integers values without suffixes will be evaluate as real int as in C# (Warning some operation can round values)
533+
/// By default = false
534+
/// </summary>
535+
public bool OptionForceIntegerNumbersEvaluationsAsDoubleByDefault { get; set; } = false;
536+
530537
private CultureInfo cultureInfoForNumberParsing = CultureInfo.InvariantCulture.Clone() as CultureInfo;
531538

532539
/// <summary>
@@ -625,21 +632,12 @@ public string OptionNumberParsingThousandSeparator
625632
/// </summary>
626633
public bool OptionFluidPrefixingActive { get; set; } = true;
627634

628-
private bool optionInlineNamespacesEvaluationActive = true;
629-
630635
/// <summary>
631636
/// if <c>true</c> allow the use of inline namespace (Can be slow, and is less secure).
632637
/// if <c>false</c> unactive inline namespace (only namespaces in Namespaces list are available).
633638
/// By default : true
634639
/// </summary>
635-
public bool OptionInlineNamespacesEvaluationActive
636-
{
637-
get { return optionInlineNamespacesEvaluationActive; }
638-
set
639-
{
640-
optionInlineNamespacesEvaluationActive = value;
641-
}
642-
}
640+
public bool OptionInlineNamespacesEvaluationActive { get; set; } = true;
643641

644642
private Func<ExpressionEvaluator, List<string>, object> newMethodMem;
645643

@@ -1514,12 +1512,13 @@ private bool EvaluateNumber(string restOfExpression, Stack<object> stack, ref in
15141512
}
15151513
else
15161514
{
1517-
if (numberMatch.Groups["hasdecimal"].Success)
1515+
if (OptionForceIntegerNumbersEvaluationsAsDoubleByDefault || numberMatch.Groups["hasdecimal"].Success)
15181516
{
15191517
stack.Push(double.Parse(numberMatch.Value.Replace("_",""), NumberStyles.Any, CultureInfoForNumberParsing));
15201518
}
15211519
else
15221520
{
1521+
15231522
stack.Push(int.Parse(numberMatch.Value.Replace("_", ""), NumberStyles.Any, CultureInfoForNumberParsing));
15241523
}
15251524
}

0 commit comments

Comments
 (0)