Почему последние цифры, отображаемые в DoubleUpDown / SingleUpDown, меняются случайным образом? - PullRequest
0 голосов
/ 10 июня 2019

Код первый:

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

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

floatvalue является свойством float Тип.

Если пользователь вводит "8.76543212" в SingleUpDown и затем оставить фокус ( Нажмите Tab ), значение изменится на 8.7654320 (часто) или 8.7654300 (редко).

Но если прокомментировать {Binding}out,

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

Все работает хорошо.

В заключение есть два требования для воспроизведения этой проблемы: 1. Привязать значение к свойству;2. Измените фокус после изменения.

Я добавил настроенный конвертер для захвата значения до и после изменения, без помощи.

Я также попытался покопаться в исходном коде NumericUpDown , но я не могу найти полезную информацию.

Код C # прост:

public float floatvalue { get; set; }

Последние цифры NumericUpDown должны отображаться точно.

1 Ответ

1 голос
/ 10 июня 2019

Ну, это проблема с IEEE 754 - это не супер точно. Попробуйте вместо этого использовать decimal - это 128-битный тип данных, который не будет округляться.

По сравнению с другими типами с плавающей запятой десятичный тип имеет большую точность и меньший диапазон, что делает его подходящим для финансовых и денежных расчетов - десятичное число (C # Reference)

...