Значение в коде позади представлено в пользовательском интерфейсе по-разному - PullRequest
2 голосов
/ 18 июня 2011

Этот дубль: 16.8999999

после theDouble = Math.Round(theDouble, 1) он отображается в отладчике как 16.9, но в пользовательском интерфейсе позже это НЕ 16.9, а 16.899999.

Почему это так?

Я занимаюсь разработкой приложения WP7, и, тем не менее, всякий раз, когда я округляю определенное значение, оно всегда отображается "ограниченным" в пользовательском интерфейсе. Я даже пытался сделать один последний раунд перед назначением массива для источника элементов списка. Это действительно странно, и я буду признателен за любую помощь или объяснение.

Я даже пытался присвоить значение сам перед тем, как будет установлен ресурс источника. Я назначил 16.89999 и округлил его, используя вышеупомянутый метод. В отладчике я получаю ожидаемый результат, но затем в пользовательском интерфейсе я получаю другой результат, а именно, 16.899999618. Помощь

Ответы [ 5 ]

10 голосов
/ 18 июня 2011

Назначьте значение обратно переменной:

   mydouble = Math.Round(mydouble, 1);

Обновление:

Поскольку вы обновили свой вопрос, вы можете сосредоточиться на отображении значения.

4 голосов
/ 18 июня 2011

Гм, нет: http://ideone.com/zuK9Z

Я думаю, что вы допустили ошибку в своем коде. Вы делаете что-то вроде этого:

double theDouble = 16.8999999;
Math.Round(theDouble);

Должно быть:

double theDouble = 16.8999999;
theDouble = Math.Round(theDouble);
1 голос
/ 19 июня 2011

Понятия не имею, но это может иметь какое-то отношение к тому, как WP7 представляет двойные числа в данных. Я изменил тип на float, и теперь он отлично работает . Я надеюсь, что кто-то в такой же ситуации найдет этот вопрос, хотя он довольно опущен.

0 голосов
/ 18 июня 2011

Двойные значения не являются точными по своей природе!

Это происходит потому, что двойные числа представлены двоичными цифрами, а не десятичными, так что в результате дается ближайшее представление запрошенного числа.

0 голосов
/ 18 июня 2011

Большинство компьютеров используют двоичные числа с плавающей точкой.Двоичная с плавающей точкой не может точно представлять 0,1 (в двоичном виде это повторяющаяся дробь).Таким образом, он также не может точно представлять 0,9.

...