为什么DoubleUpDown / SingleUpDown中显示的最后一位数字是随机变化的?

时间:2019-06-10 07:44:59

标签: c# wpf xceed numericupdown

代码优先:

xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
...

<xctk:SingleUpDown Value="{Binding floatvalue}" FormatString="F7" Minimum="0"/>
...

浮点值 float 类型的属性。

如果用户在 SingleUpDown 中键入“ 8.76543212”,然后保持焦点(按Tab ),则该值将更改为8.7654320(频繁)或8.7654300(很少)

但是如果将{Binding}注释掉,

<xctk:SingleUpDown Value="0.1234567" FormatString="F7" Minimum="0"/>

一切正常。

总而言之,要重现此问题有两个要求: 1.将价值绑定到财产; 2.修改后更改焦点。

我添加了一个自定义的Converter来捕获更改前后的值,没有帮助。

我也试图深入研究NumericUpDown的源代码,但找不到任何有用的信息。

后面的C#代码很简单:

public float floatvalue { get; set; }

NumericUpDown的最后一位应准确显示。

1 个答案:

答案 0 :(得分:1)

嗯,这是IEEE 754的问题-它不是非常精确。尝试改用decimal-这是一个不会舍入的128位数据类型。

与其他浮点类型相比,十进制类型具有更高的精度和更小的范围,这使其适用于财务和货币计算- decimal (C# Reference)