60 lines
1.5 KiB
Plaintext
60 lines
1.5 KiB
Plaintext
@using System.Globalization
|
|
@inherits InputBase<decimal>
|
|
|
|
<input type="number"
|
|
value="@CurrentValueAsString"
|
|
@onchange="OnChange"
|
|
step="@Step"
|
|
min="@Min"
|
|
max="@Max"
|
|
class="@CssClass" />
|
|
|
|
@code {
|
|
/// <summary>
|
|
/// Number of decimal digits to display (default 3).
|
|
/// </summary>
|
|
[Parameter] public int Decimals { get; set; } = 3;
|
|
|
|
/// <summary>
|
|
/// Step increment for the number input (default 0.001).
|
|
/// </summary>
|
|
[Parameter] public decimal Step { get; set; } = 0.001M;
|
|
|
|
/// <summary>
|
|
/// Optional minimum value.
|
|
/// </summary>
|
|
[Parameter] public decimal? Min { get; set; }
|
|
|
|
/// <summary>
|
|
/// Optional maximum value.
|
|
/// </summary>
|
|
[Parameter] public decimal? Max { get; set; }
|
|
|
|
protected override string FormatValueAsString(decimal value)
|
|
{
|
|
return value.ToString($"F{Decimals}", CultureInfo.InvariantCulture);
|
|
}
|
|
|
|
protected override bool TryParseValueFromString(
|
|
string value,
|
|
out decimal result,
|
|
out string validationErrorMessage)
|
|
{
|
|
if (decimal.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out var parsed))
|
|
{
|
|
result = Math.Round(parsed, Decimals);
|
|
validationErrorMessage = null;
|
|
return true;
|
|
}
|
|
|
|
result = 0;
|
|
validationErrorMessage = "Invalid decimal number";
|
|
return false;
|
|
}
|
|
|
|
private void OnChange(ChangeEventArgs e)
|
|
{
|
|
CurrentValueAsString = e.Value?.ToString();
|
|
}
|
|
}
|