0

我有一个具有双类型依赖属性的自定义控件。当我从 XAML 设置此属性时,假设我将 12.34 作为此属性的值。属性更改回调,将值设为 12.3400001525879,实际值具有尾随垃圾十进制值。

(这不是 Silverlight 的情况)

仅当我们通过 XAML 设置值时才会发生这种情况,并且仅当我们有多个十进制值时才会发生这种情况。

    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并非所有十进制值都可以用 和等固定宽度二进制浮点类型精确表示double。不能精确表示的十进制值(如 12.34)将四舍五入为可表示的最接近的值。您可以在 David Goldberg 的优秀文章“每个计算机科学家应该了解的浮点算术知识”中阅读有关浮点类型的所有内容。

在这种情况下,您提到的实际值表明(a)值 12.34 被解析为 afloat或(b)它在某个时候被转换为 a float。这有点奇怪,但可能是设计使然,也可能是错误。无论是否是错误,如果您在软件中使用浮点类型,则需要考虑潜在的舍入误差。

于 2012-10-02T05:15:37.463 回答
0

我可以在我的测试中看到同样的问题。看起来显然像木星中的一个错误。我会在 MSDN 论坛上报告它。

于 2012-10-02T04:36:54.377 回答