Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Math::round 
:(
    Опции темы
hash_2000
Дата 28.10.2008, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 12.9.2008

Репутация: нет
Всего: нет



тут поднималась уже тема по поводу глюков в работе математических функций .Net ... 
только по моему решение не исчерпывающее.
вот столкнулся с проблемой округления. вот округляю с помощью Math::Round до второго знака после запятой число 
141729.10560000001 как результат возвращает мне 141729.10999999999 ... ??? я впал в некоторый ступор ... уже была мысль самому написать функции для округления, но всетаки может ктонибудь знает решение этой проблемы

PM MAIL   Вверх
Partizan
Дата 28.10.2008, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



hash_2000, никакие это не глюки...это нормальное представление числа с плавающей точкой...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Bogdan1024
Дата 28.10.2008, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 3
Всего: 13



Мне кажется что товарищ hash_2000 округлил не до второго знака, а до первого. 


--------------------
user posted image
PM MAIL   Вверх
Partizan
Дата 28.10.2008, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



Bogdan1024, да нет...вполне таки нормальное округление до второго...

141729.10560000001 

Округляем до второго, получаем

141729.10999999999... ~ 141729.11


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Dims
Дата 3.11.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Наверное, чтобы работало правильно, надо использовать тип decimal. 

Я сам не пробовал, но по логике именно так и должно быть. Decimal означает "десятичный", в то время, как обычные double хранятся в двоичном представлении. А не любое дробное десятичное число может быть представлено конечной дробью в двоичной форме -- эти и приводит к таким результатам.

Иными словами, надо округлять не

141729.10560000001

а 

141729.10560000001m

Буква "m" на конце означает десятичный тип.

Сейчас проверю гипотезу...

Добавлено через 7 минут и 2 секунды
Чё-то у меня по всякому получается без глюков:

Код

static void Main(string[] args)
        {
            Console.WriteLine(Math.Round((double)141729.10560000001,2));
            Console.WriteLine(Math.Round(141729.10560000001m,2));
            Console.ReadLine();
        }


выдаёт

141729,11
141729,11

Добавлено через 11 минут и 25 секунд
Не могу воспроизвести ошибку. Ни так, ни сяк.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0605 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.