我在将数字转换为 IFormattable 时遇到问题,对其调用 ToString(...) 并传递 from 的 FormatCode0.000;-;0
表示如果数字为正,我想显示三位小数的精度,显示“- " 如果为负数,如果为零则显示为零(没有三位小数的精度)。如果数字的大小不超过 0.5,则该数字的负性不被拾取。
这是我的 FormattedValue 的公共访问器:
public string FormattedValue
{
get
{
if (Value is IFormattable)
{
return (Value as IFormattable)
.ToString(FormatCode,
System.Threading.Thread.CurrentThread.CurrentUICulture);
}
else
{
return Value.ToString();
}
}
}
例如,如果我执行该行
(-0.5 as IFormattable)
.ToString("0.000;-;0",
System.Threading.Thread.CurrentThread.CurrentUICulture)
我得到了我的期望:“-”。但是,当我传入稍微低一点的东西时,比如说,
(-0.499 as IFormattable)
.ToString("0.000;-;0",
System.Threadings.Thread.CurrentThread.CurrentUICulture)
我得到“0”返回。
有谁知道为什么这不起作用?这非常重要,因为我试图以这种方式格式化的许多值将比这种方法似乎工作的值要小。有什么办法能让我按照我想要的方式工作吗?谢谢!
更新
这最终为我工作:
Math.Abs(value) < 0.0005
? value.ToString("0.000")
: value.ToString("0.000;-;-");