Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проблема округления Single в Excel / 16 сообщений из 16, страница 1 из 1
06.04.2006, 08:30:11
    #33647873
Jetus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема округления Single в Excel


Привет всем!

Возникла проблема такого рода.
В результате математических операций я получаю ряд чисел типа Single, где ещё куча знаков после запятой, а мне надо только три. Использую функцию Round, но эффект не впечатляет: в ячейках получаются числа типа: 5,85500001395478, а не 5,855 как планировалось. Что делать?


______________________________
Never Surrender - Nothing Impossible!
...
Рейтинг: 0 / 0
06.04.2006, 08:54:36
    #33647911
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема округления Single в Excel
Код: plaintext
1.
2.
3.
4.
Sub f()
    Dim a As Single
    a =  5 . 85500001395478 
    Cells( 1 ,  1 ).Value = Round(CDbl(a),  3 )
End Sub
...
Рейтинг: 0 / 0
06.04.2006, 09:04:39
    #33647926
Jetus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема округления Single в Excel


Сенкс! Так почему-то работает.


______________________________
Never Surrender - Nothing Impossible!
...
Рейтинг: 0 / 0
06.04.2006, 09:19:22
    #33647947
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема округления Single в Excel
и так работает
Код: plaintext
    Cells( 2 ,  1 ).Value = Round(CStr(a),  3 )
...
Рейтинг: 0 / 0
06.04.2006, 11:20:40
    #33648376
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема округления Single в Excel
Еще работает "точность как на экране".
...
Рейтинг: 0 / 0
06.04.2006, 11:31:51
    #33648433
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема округления Single в Excel
big-dukeЕще работает "точность как на экране".

неправда не работает
...
Рейтинг: 0 / 0
06.04.2006, 18:15:42
    #33650200
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема округления Single в Excel
vkodor big-dukeЕще работает "точность как на экране".
неправда не работает
Работает :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
09.11.2007, 10:23:32
    #34927127
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема округления Single в Excel
White Owl vkodor big-dukeЕще работает "точность как на экране".
неправда не работает
Работает :)
Действительно работает
...
Рейтинг: 0 / 0
09.11.2007, 10:38:12
    #34927190
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема округления Single в Excel
Код: plaintext
1.
2.
3.
Sub test()
    Debug.Print VBA.Round( 129 . 525 ,  2 )
    Debug.Print WorksheetFunction.Round( 129 . 525 ,  2 )
End Sub

Может кто-нибудь разяснит почему разные результаты?
...
Рейтинг: 0 / 0
09.11.2007, 10:56:13
    #34927267
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема округления Single в Excel
Похоже косяк
Причём ладно бы сказать что VBA не умеет правильно округлять, но он ведь умеет
Код: plaintext
Debug.Print CDbl(Format( 3 . 1265 , "#.###"))
...
Рейтинг: 0 / 0
09.11.2007, 10:57:18
    #34927272
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема округления Single в Excel
А так неправильно
Код: plaintext
    Debug.Print VBA.Round( 3 . 1265 ,  3 )
...
Рейтинг: 0 / 0
09.11.2007, 12:06:13
    #34927623
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема округления Single в Excel
Плохие грабли
...
Рейтинг: 0 / 0
09.11.2007, 21:21:01
    #34929525
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема округления Single в Excel
Deggasad,
vkodor,
число 3,1265 не является представимым в виде конечной дроби в двоичной системе счисления (классический пример: 0,1 10 =0,00(0011) 2 ). Число 3,1265, переведённое в двоичную систему, хранящееся в double (и имеющее конечное представление), примерно на 2 в минус пятьдесят какой-то степени меньше записанного человеком в десятичной системе. Отсюда и результат VBA.Round(3.1265, 3) - она работает с готовым double-м. Другие функции могут работать с числом в десятичном представлении.

Предполагается, что основы вычислительной математики изучал любой программист. Я не прав? ;-)
...
Рейтинг: 0 / 0
09.11.2007, 22:31:28
    #34929558
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема округления Single в Excel
vkodor
Код: plaintext
1.
2.
3.
Sub test()
    Debug.Print VBA.Round( 129 . 525 ,  2 )
    Debug.Print WorksheetFunction.Round( 129 . 525 ,  2 )
End Sub

Может кто-нибудь разяснит почему разные результаты?Это разные функции. Первая принадлежит VBA, вторая самому Экселю.
Вот тебе еще один макрос для игр:
Код: plaintext
1.
2.
3.
Sub test()
    Debug.Print VBA.Round( 129 . 525 ,  2 )
    Debug.Print VBA.Round( 129 . 525000001 ,  2 )
End Sub
Да VBA функция глючит, никаких сомнений. Откуда у этого глюка ноги растут - Бенедикт уже расписал, но почему в Excel это все учли а в VBA не учли? Патамучта.
...
Рейтинг: 0 / 0
09.11.2007, 22:32:51
    #34929559
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема округления Single в Excel
БенедиктПредполагается, что основы вычислительной математики изучал любой программист. Я не прав? ;-)не прав. Это не предполагается, это аксиома :)
...
Рейтинг: 0 / 0
10.11.2007, 11:43:05
    #34929770
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема округления Single в Excel
White Owl БенедиктПредполагается, что основы вычислительной математики изучал любой программист. Я не прав? ;-)не прав. Это не предполагается, это аксиома :)
тока в разделе МикрософтОфис далеко не все програмисты
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проблема округления Single в Excel / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]