首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >十进制截断加无限制零点

问十进制截断加无限制零点
EN

Stack Overflow用户
提问于 2014-11-12 07:04:03
回答 1查看 218关注 0票数 0

我有一个关于Xamarin表格的入口字段。其中我必须将值存储在十进制字段中。

根据要求,我必须有##.####格式的数据。

我正在成功地做这件事,我认为它应该少于一百。

但是,在截断问题时,我有一个问题。

我的非焦点,即使是进入字段如下。

代码语言:javascript
复制
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

代码语言:javascript
复制
private string AddPercentageSymbol(decimal value)
{
    return string.Format("{0}{1}", value, "%");
}

编辑:预期输出

代码语言:javascript
复制
99.9999 = 99.9999%
99.9999766 = 99.9999%
99.99 = 99.99% or 99.9900%
0.76433 = 0.7643%
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-12 07:22:26

我复制了这个-它看起来就像是Mono中的一个bug。很容易证明:

代码语言:javascript
复制
decimal x = 9m;
decimal y = x / 10;
Console.WriteLine(y);

这个应该是"0.9",但实际上是“0.9000000000000000000000000000000000”。

请在Mono中报告一个bug :)

好消息是你可以用Math.Round去除多余的数字。

代码语言:javascript
复制
decimal z = Math.Round(y, 2);
Console.WriteLine(z); // 0.90

假设您被乘以10000,截断,然后除以10000到整数(向下)到4位,那么您应该可以使用Math.Round(value, 4),因为到那时,这个值在小数点4位之后不会有任何重要的数字。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26881099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档