Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Правильное округление в Excel 7 Добавлено: 09.09.08 18:04  

Автор вопроса:  Yoshie
Дамы и господа :)
Подскажите пожалуйста, как правильно использовать функцию Format, чтобы она просто округлила до 4го знака после запятой включительно, если число канеш дробное
Эксперименты ставила, но её логику так и не осилила - результат полный рандом.


 Я так понимаю, передаваемое ей число надо сначала конвертнуть в строку? Т.е. если я ей передаю какую-то переменную дробного типа, то мне надо сделать Cstr?
Со вторым параметром - полная лажа

Надежда только на вас :)

ЗЫ.Round не предлагать по известным причинам:((((

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #1 Добавлено: 09.09.08 20:52
Если мне нужно было округлить самой, делала так. Например, нужно округлить до десятых. К числу дробному + 0.5, а затем результат в формат (#.0).
Нужно округлить до сотых. К числу дробному + 0.05, а затем результат в формат (#.00).
У меня без проблем всегда получалось.

Ответить

Номер ответа: 2
Автор ответа:
 Yoshie



Вопросов: 4
Ответов: 11
 Профиль | | #2 Добавлено: 10.09.08 11:22
Не работает:( У меня числа разных порядков
Такая процедура из числа 2364.5123 при формате (#.0000) даёт 23645123, из 0.2 делает 2000

Есть какой-нить нормальный способ округления?

Round точно можно хоронить?

Ответить

Номер ответа: 3
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #3 Добавлено: 10.09.08 11:42
А как пишешь ? Так ?
Format(дробное число, "#.0000";)

У тебя нигде не стоит умножение на 10000 ? А то что-то очень похоже. :-)

Ответить

Номер ответа: 4
Автор ответа:
 Yoshie



Вопросов: 4
Ответов: 11
 Профиль | | #4 Добавлено: 10.09.08 12:04
Format(Ячейка с числом, сохранённым как текст, "#.0000";), правда он же возвращает строку, поэтому надо форматнуть в дробный сингл. Может из-за Csng?

Нет умножения! В том то и дело, что нет. А мне надо сравнить числа на равенство

Опытным путём вычислили, что на разных компах макрос вообще работает по-разному. На моём офисе 7 даже Round работает, на другом тупо перестаёт работать активация листа для вставки данных

Ответить

Номер ответа: 5
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #5 Добавлено: 10.09.08 12:34
  a = "2351.28912"
  MsgBox Format(a, "#.0000";), vbOKOnly  'рез-т 2351.2891
  a = 2351.28915
  MsgBox Format(a, "#.0000";), vbOKOnly  'рез-т 2351.2892
  
  MsgBox Val(a), vbOKOnly  'преобразование строки в число. рез-т 2351.2892  Внимание на разделитель числа.
Все нормально округляет.

P.S. Правда у меня Офис 2003

Ответить

Номер ответа: 6
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #6 Добавлено: 10.09.08 12:35
MsgBox Val( a ), vbOKOnly  'преобразование строки в число. рез-т 2351.2892  Внимание на разделитель числа.

Ответить

Номер ответа: 7
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #7 Добавлено: 10.09.08 12:38
другом тупо перестаёт работать активация листа для вставки данных
А как написано Sheets(2).Activate или Sheets(3).Select ? Более правильно 1.

Ответить

Номер ответа: 8
Автор ответа:
 Yoshie



Вопросов: 4
Ответов: 11
 Профиль | | #8 Добавлено: 10.09.08 12:48
Вот последняя строка у меня возвращает 2351 и msgbox - ом и записывает в ячейку......:(

Ответить

Номер ответа: 9
Автор ответа:
 Yoshie



Вопросов: 4
Ответов: 11
 Профиль | | #9 Добавлено: 10.09.08 12:48
Написано вариантом 1.....

Ответить

Номер ответа: 10
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #10 Добавлено: 10.09.08 15:03
Числовой разделитель в ячейке стоит ,
Вот так напиши:
b=Val(Replace(Range("J10";).Value, ",", ".";))
Val корректно преобразует дробные только те, которые разделены "."

Ответить

Номер ответа: 11
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #11 Добавлено: 10.09.08 15:08
Кстати, вот так и Round должен работать:
Round(Range("J10";).Value, 4)
Округляет математически.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам