首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将编号转换为IFormattable无法按预期工作

将编号转换为IFormattable无法按预期工作
EN

Stack Overflow用户
提问于 2014-05-01 22:37:39
回答 1查看 138关注 0票数 2

我在给IFormattable打电话给ToString(.)时遇到了麻烦。在上面,并传递一个FormatCode的from 0.000;-;0,这意味着如果数字为正,我想显示三个小数位的精度,如果是负的,则显示一个"-“,如果它是零,则显示为零(没有三位小数位的精度)。如果该数字的大小不超过0.5,则该数字的负性不会被取出来。

这是我的FormattedValue的公共访问器:

代码语言:javascript
复制
public string FormattedValue
{
    get
    {
        if (Value is IFormattable)
        {
            return (Value as IFormattable)
                       .ToString(FormatCode,
                                 System.Threading.Thread.CurrentThread.CurrentUICulture);
        }
        else
        {
            return Value.ToString();
        }
    }
}

例如,如果我执行行

代码语言:javascript
复制
(-0.5 as IFormattable)
    .ToString("0.000;-;0", 
              System.Threading.Thread.CurrentThread.CurrentUICulture)

我得到了我所期望的:"-“。不过,当我经过一些稍微低一些的东西时,比如说,

代码语言:javascript
复制
(-0.499 as IFormattable)
    .ToString("0.000;-;0", 
              System.Threadings.Thread.CurrentThread.CurrentUICulture)

我得到"0“的回报。

有人知道为什么这不管用吗?这是非常重要的,因为我试图用这种方式格式化的许多值都比这种方法的效果要小。我能让这个按我想的方式工作吗?谢谢!

更新

这就是最后为我工作的原因:

代码语言:javascript
复制
Math.Abs(value) < 0.0005
    ? value.ToString("0.000")
    : value.ToString("0.000;-;-");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-01 22:50:30

问题是,使用"-“会使其被视为具有零精度,即为- 0,这实际上是0。这将导致根据零情况对其进行格式化。从文档中获取自定义格式。

如果要格式化的数字为非零,但根据第一或第二节中的格式舍入后为零,则根据第三节格式化所得到的零。

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

https://stackoverflow.com/questions/23417854

复制
相关文章

相似问题

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