59 lines
2.0 KiB
C#
59 lines
2.0 KiB
C#
using System;
|
|
using System.Globalization;
|
|
using System.Linq;
|
|
using System.Windows.Data;
|
|
|
|
namespace CordonelAssemblyLine.Converter
|
|
{
|
|
public class MathConverter : IValueConverter
|
|
{
|
|
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
|
{
|
|
|
|
return double.Parse((string)value, CultureInfo.CurrentUICulture);
|
|
}
|
|
|
|
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
|
{
|
|
string format = "";
|
|
string strValue = (string)value;
|
|
strValue = strValue.Replace("x", "*").Replace("X", "*");
|
|
if (strValue.ToUpper().Contains("E"))
|
|
{
|
|
|
|
return double.Parse(strValue, CultureInfo.InvariantCulture).ToString(format);
|
|
//2E-07
|
|
}
|
|
else if (strValue.Contains("^-") && strValue.Contains("*"))
|
|
{
|
|
var split = strValue.Split('*');
|
|
var mulit = double.Parse(split.First());
|
|
var powNumber = double.Parse(split.Last().Split('^').First());
|
|
var powBy = double.Parse(split.Last().Split('^').Last());
|
|
|
|
|
|
return (mulit * Math.Pow(powNumber, powBy)).ToString(format);
|
|
//2*10^-3
|
|
}
|
|
else if (strValue.Contains("-") && strValue.Contains("*"))
|
|
{
|
|
|
|
var split = strValue.Split('*');
|
|
var mulit = double.Parse(split.First());
|
|
var powNumber = double.Parse(split.Last().Split('-').First());
|
|
var powBy = double.Parse(split.Last().Split('-').Last());
|
|
powBy = powBy * -1;
|
|
return (mulit * Math.Pow(powNumber, powBy)).ToString(format);
|
|
|
|
}
|
|
else if (strValue.Contains("0,0"))
|
|
{
|
|
return double.Parse(strValue, CultureInfo.CurrentUICulture).ToString(format);
|
|
}
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
}
|
|
} |