我有一个关于Xamarin表格的入口字段。其中我必须将值存储在十进制字段中。
根据要求,我必须有##.####格式的数据。
我正在成功地做这件事,我认为它应该少于一百。
但是,在截断问题时,我有一个问题。
我的非焦点,即使是进入字段如下。
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%发布于 2014-11-12 07:22:26
我复制了这个-它看起来就像是Mono中的一个bug。很容易证明:
decimal x = 9m;
decimal y = x / 10;
Console.WriteLine(y);这个应该是"0.9",但实际上是“0.9000000000000000000000000000000000”。
请在Mono中报告一个bug :)
好消息是你可以用Math.Round去除多余的数字。
decimal z = Math.Round(y, 2);
Console.WriteLine(z); // 0.90假设您被乘以10000,截断,然后除以10000到整数(向下)到4位,那么您应该可以使用Math.Round(value, 4),因为到那时,这个值在小数点4位之后不会有任何重要的数字。
https://stackoverflow.com/questions/26881099
复制相似问题