我在给IFormattable打电话给ToString(.)时遇到了麻烦。在上面,并传递一个FormatCode的from 0.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;-;-");发布于 2014-05-01 22:50:30
问题是,使用"-“会使其被视为具有零精度,即为- 0,这实际上是0。这将导致根据零情况对其进行格式化。从文档中获取自定义格式。
如果要格式化的数字为非零,但根据第一或第二节中的格式舍入后为零,则根据第三节格式化所得到的零。
https://stackoverflow.com/questions/23417854
复制相似问题