0

double 型の依存関係プロパティを持つカスタム コントロールがあります。XAML からこのプロパティを設定するとき、このプロパティの値として 12.34 を指定するとします。プロパティがコールバックを変更し、値が 12.3400001525879 になりました。実際の値の末尾にはガベージ 10 進数値が含まれています。

(これは Silverlight には当てはまりません)

これは、XAML で値を設定した場合にのみ発生し、10 進数値が複数ある場合にのみ発生します。

    public double Value
    {
        get { return (double)GetValue(ValueProperty); }
        set { SetValue(ValueProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Value.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty ValueProperty =
        DependencyProperty.Register("Value", typeof(double), typeof(TextBoxExt), new PropertyMetadata(null, new PropertyChangedCallback(OnValueChanged)));

    private static void OnValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        System.Diagnostics.Debug.WriteLine(e.NewValue);//Not priniting the exact value.
    }

同じ問題に直面している人はいますか?

4

2 に答える 2

1

floatすべての 10 進数値が、 や などの固定幅バイナリ浮動小数点型で正確に表現できるわけではありませんdouble。正確に表現できない 10 進数値 (12.34 など) は、表現可能な最も近い値に丸められます。浮動小数点型については、David Goldberg の優れた記事「What Every Computer Scientist Should Know About Floating-Point Arithmetic」ですべて読むことができます。

この場合、言及した実際の値は、(a) 値 12.34 が a として解析されているfloatか、(b)floatある時点で a に変換されていることを示しています。これは少し奇妙ですが、仕様またはバグのいずれかである可能性があります。バグであるかどうかにかかわらず、ソフトウェアで浮動小数点型を使用する場合は、潜在的な丸め誤差を考慮する必要があります。

于 2012-10-02T05:15:37.463 に答える
0

私のテストでも同じ問題が見られます。木星のバグのように見えます。MSDN フォーラムで報告します。

于 2012-10-02T04:36:54.377 に答える