@using System.Globalization @code { /// /// Actual bind value /// [Parameter] public double Value { get; set; } /// /// Event for value changed /// [Parameter] public EventCallback ValueChanged { get; set; } /// /// Number of decimal places to display /// [Parameter] public int Decimals { get; set; } = 3; /// /// Step increment /// [Parameter] public double Step { get; set; } = 0.001; /// /// Minimum value /// [Parameter] public double? Min { get; set; } /// /// Maximum value /// [Parameter] public double? Max { get; set; } /// /// CssClass for input component /// [Parameter] public string CssClass { get; set; } = string.Empty; private string FormattedValue => Value.ToString($"F{Decimals}", CultureInfo.InvariantCulture); private async Task OnChange(ChangeEventArgs e) { if (double.TryParse(e.Value?.ToString(), NumberStyles.Any, CultureInfo.InvariantCulture, out var parsed)) { var rounded = Math.Round(parsed, Decimals); Value = rounded; await ValueChanged.InvokeAsync(rounded); } } }