数値を IFormattable にキャストし、ToString(...) を呼び出し、from の FormatCode を渡すことに問題があり0.000;-;0
ます。数値が正の場合、小数点以下 3 桁を表示することを意味し、"- " 負の場合、ゼロの場合はゼロを表示します (精度の小数点以下 3 桁なし)。数値の大きさが 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;-;-");