2

数値を 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;-;-");
4

1 に答える 1