using System;
using System.Globalization;
using System.Linq;
using System.Windows.Data;
namespace CordonelAssemblyLine.Converter
{
///
///
/// Conversion between strings and doubles
///
public class MathConverter : IValueConverter
{
///
/// Converts a string to double which contains a pure floating point value
///
/// string containing the double
/// UNUSED
/// UNUSED
///
/// value in double format
public Object Convert(Object value, Type targetType, Object parameter, CultureInfo culture)
{
return double.Parse((String)value ?? string.Empty, CultureInfo.CurrentUICulture);
}
///
/// Converts a string containing an exponential value to a pure double returned as string
///
///
///
///
///
///
public Object ConvertBack(Object value, Type targetType, Object parameter, CultureInfo culture)
{
String format = "";
String strValue = (String)value;
if (strValue != null)
{
strValue = strValue.Replace("x", "*").Replace("X", "*");
//2E-07
if (strValue.ToUpper().Contains("E"))
{
return double.Parse(strValue, CultureInfo.InvariantCulture).ToString(format);
}
//2*10^-3
if (strValue.Contains("^-") && strValue.Contains("*"))
{
var split = strValue.Split('*');
var multiply = double.Parse(split.First());
var powNumber = double.Parse(split.Last().Split('^').First());
var powBy = double.Parse(split.Last().Split('^').Last());
return (multiply * Math.Pow(powNumber, powBy)).ToString(format);
}
if (strValue.Contains("-") && strValue.Contains("*"))
{
var split = strValue.Split('*');
var multiply = double.Parse(split.First());
var powNumber = double.Parse(split.Last().Split('-').First());
var powBy = double.Parse(split.Last().Split('-').Last());
powBy *= -1;
return (multiply * Math.Pow(powNumber, powBy)).ToString(format);
}
if (strValue.Contains("0,0") || strValue.Contains("0.0"))
{
return double.Parse(strValue, CultureInfo.CurrentUICulture).ToString(format);
}
}
return value;
}
}
}