I want to make tiny calculator that if you write for example 2/3 and you have got 0.6666667. I use DynamicExpresso.Core library but I need to write 2f/3f to have 0.6666667 (if I write 2/3 I get 0). I think I should use somethink like forCounting = Regex.Replace(forCounting, Regex.Match(forCounting, @"\d+").Value, Regex.Match(forCounting, @"\d+").Value + "f");
but it adds f after only first number. Do you have any ideas?
Asked
Active
Viewed 117 times
2

Kuba_Z2
- 54
- 1
- 6
3 Answers
1
Use
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\d+(?:\.\d+)?";
string substitution = "$0f";
string input = "Text: 2/3, 1.9";
string result = Regex.Replace(input, pattern, substitution);
Console.WriteLine(result);
}
}
See C# proof.
Results: Text: 2f/3f, 1.9f

Ryszard Czech
- 18,032
- 4
- 24
- 37
0
Starting with DynamicExpresso 2.6.0, it's possible to set a default numeric type.
For example, you can ask it to consider all numbers as double, and get the result you expect:
var target = new Interpreter();
target.SetDefaultNumberType(DefaultNumberType.Double);
var dbl = target.Eval<double>("2/3");
Console.WriteLine(dbl); // 0.6666666666666666

Métoule
- 13,062
- 2
- 56
- 84
-1
Good code:
forCounting= Regex.Replace(forCounting, @"([0-9.]+)", @"$0f");

Kuba_Z2
- 54
- 1
- 6
-
This is no good, `([0-9.]+)` also matches `........`. See my update. – Ryszard Czech Dec 01 '20 at 20:18