十进制截断添加不受限制的零

本文关键字:受限制 添加 十进制 | 更新日期: 2023-09-27 18:30:14

我有一个Xamarin表单的输入字段。我必须将值存储在十进制字段中。

根据要求,我必须将数据保存在###中。###总体安排

它应该少于一百的验证我正在成功地完成它。

然而,我在截断问题时遇到了一个问题。

我的Unforcused even输入字段如下。

private void RateEntry_UnFocused(object sender, FocusEventArgs e)
{
    if (string.IsNullOrEmpty(((Entry)sender).Text))
    {
        ((Entry)sender).Text = "0.00%";
        _ProfileViewModel.Profile.Rate = (decimal)0.00;
    }
    else
    {
        _ProfileViewModel.Profile.Rate = Math.Truncate(Convert.ToDecimal(((Entry)sender).Text)* 10000)/10000;
        ((Entry)sender).Text = AddPercentageSymbol(_ProfileViewModel.Profile.Rate);
    }
    Validate();
}

例如,如果我给出的值为99.9999,那么我得到的值是99.99990000000000000%

你能帮我解决这个问题吗。

编辑:函数AddPercentageSymbol

private string AddPercentageSymbol(decimal value)
{
    return string.Format("{0}{1}", value, "%");
}

编辑:预期输出

99.9999 = 99.9999%
99.9999766 = 99.9999%
99.99 = 99.99% or 99.9900%
0.76433 = 0.7643%

十进制截断添加不受限制的零

我已经复制了这个——看起来它只是Mono中的一个bug。很容易证明:

decimal x = 9m;
decimal y = x / 10;
Console.WriteLine(y);

这应该是"0.9",但实际上是"0.9000000000000000000000000000"

请报告Mono中的错误:)

好消息是,您可以使用Math.Round来消除多余的数字,例如

decimal z = Math.Round(y, 2);
Console.WriteLine(z); // 0.90

假设你乘以10000,截断,然后除以10000,四舍五入(向下)到4位,你应该可以使用Math.Round(value, 4),因为到那时,值在小数点后4位不会有任何有效数字。