Список форумов Акцент Акцент
официальный форум разработчика программы Акцент
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Бага в Round2?

 
Начать новую тему   Ответить на тему    Список форумов Акцент -> Акцент 7.0
Предыдущая тема :: Следующая тема  
Автор Сообщение
kris



Зарегистрирован: 12.01.2006
Сообщения: 371

СообщениеДобавлено: Вс Окт 30, 2011 11:36 am    Заголовок сообщения: Бага в Round2? Ответить с цитатой

Есть такой код:
Код:
Option Explicit

MsgBox NumericToXML(CDbl(8500))
MsgBox NumericToXML(8500)

   ' Конвертирует число в строку, умноженную на 10000
   Private Function NumericToXML(Val)
      If IsNumeric(Val) Then
         Val = Round2(Val,4) ' так глючит
'         Val = CCur(Val) ' так работает нормально
         NumericToXML = CStr(CDbl(Fix(Val))*10000 + (Val - Fix(Val)) * 10000)
      End If
   End Function

Кто-нибудь объяснит мне, почему CDbl(8500) округляется с хвостиком в хрен-знает-каком-знаке, а просто 8500 - без хвостиков? Выкрутился принудительным преобразованием в Currency вместо округления, но все-таки хотелось бы понимать, откуда ноги растут.

P.S. Когда-то встречался с таким поведением Double, но тогда это явно было связано с "приближенностью" типа. Не думал, что это проявляется и в Round'e.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
olimp
Site Admin


Зарегистрирован: 10.03.2005
Сообщения: 2661

СообщениеДобавлено: Пт Ноя 04, 2011 10:28 am    Заголовок сообщения: Re: Бага в Round2? Ответить с цитатой

kris писал(а):

MsgBox NumericToXML(CDbl(8500))
MsgBox NumericToXML(8500)
[/code]

Кто-нибудь объяснит мне, почему CDbl(8500) округляется с хвостиком в хрен-знает-каком-знаке, а просто 8500 - без хвостиков?

Потому что 8500 VB преобразовывает в целое число. Напиши

MsgBox NumericToXML(8500.)
MsgBox NumericToXML(8500)

и получишь в функции такой же глюк.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
kris



Зарегистрирован: 12.01.2006
Сообщения: 371

СообщениеДобавлено: Пт Ноя 04, 2011 2:12 pm    Заголовок сообщения: Ответить с цитатой

Это я понимаю.
Что меня удивляет, так это "спонтанность и непредсказуемость" double. Вот сейчас запустил тот же код, что в моем прошлом посте - нет ошибки! Где правда?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Акцент -> Акцент 7.0 Часовой пояс: GMT + 2
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group