代码优先:
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的最后一位应准确显示。
答案 0 :(得分:1)
嗯,这是IEEE 754的问题-它不是非常精确。尝试改用decimal
-这是一个不会舍入的128位数据类型。
与其他浮点类型相比,十进制类型具有更高的精度和更小的范围,这使其适用于财务和货币计算- decimal (C# Reference)