38 lines
1.0 KiB
C#
38 lines
1.0 KiB
C#
|
using System;
|
|||
|
using System.Globalization;
|
|||
|
using Avalonia.Data.Converters;
|
|||
|
|
|||
|
namespace DispenserUI.ViewModels.Converter;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 对象的数值转换为指定精度的字符串
|
|||
|
/// </summary>
|
|||
|
public class DoubleToPrecisionConverter : IValueConverter
|
|||
|
{
|
|||
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
|||
|
{
|
|||
|
int digits = 3;
|
|||
|
if (int.TryParse(parameter as string, out int _digits))
|
|||
|
{
|
|||
|
digits = _digits;
|
|||
|
}
|
|||
|
|
|||
|
return value switch
|
|||
|
{
|
|||
|
|
|||
|
// 确保输入值是浮点数
|
|||
|
int => value,
|
|||
|
double val => Math.Round(val, digits),
|
|||
|
_ => value
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
|||
|
{
|
|||
|
// 从字符串转换回浮点数
|
|||
|
if (value is string stringValue && double.TryParse(stringValue, out var result)) return result;
|
|||
|
|
|||
|
// 如果转换失败,则返回0
|
|||
|
return 0d;
|
|||
|
}
|
|||
|
}
|