Страница 1 из 1

Математическое округление в R

Добавлено: 12 авг 2021, 16:58
VistaSV30
Добрый день!
Нужно сделать функцию для математического округления или может быть есть уже готовые в каком-то пакете?
Базовая функция round() выполняет банковское округление т.е.

Код: Выделить всё

a <- c(2.65, 2.75) 
round(a, 1)
Вернет 2.6, 2.8, а мне нужно 2.7, 2.8

Пробую сам написать функцию, пока не получается

Re: Математическое округление в R

Добавлено: 12 авг 2021, 17:13
VistaSV30
Вот такой вариант вроде бы работает:

Код: Выделить всё

a <- c(2.45, 2.55, 2.65, 2.75, -2.75, 2.3333, 2.98)

mround <- function(num, cnt=0) {
  z = sign(num)
  num = abs(num) * 10 ** cnt * 10
  
  b <- c()
  for(i in num) {
    if(i %% 10 >=5) (b = c(b, i+10)) else (b = c(b, i))
  }
  
  num = trunc(b/10) / 10 ** cnt * z
  return(num)
}

mround(a,1)
Может быть можно что-то еще подкрутить в коде? Я только учусь

Re: Математическое округление в R

Добавлено: 12 авг 2021, 17:23
gamm

Re: Математическое округление в R

Добавлено: 12 авг 2021, 17:34
VistaSV30
gamm, спасибо большое!
Можно считать, что вопрос решен! :D

Re: Математическое округление в R

Добавлено: 12 авг 2021, 20:46
gamm
округление, кстати, сделано строго по стандарту, о чем написано в хелпе для round() ...

Re: Математическое округление в R

Добавлено: 13 авг 2021, 16:40
VistaSV30
По ГОСТ Р 8.736-2011 Государственная система обеспечения единства измерений. ИЗМЕРЕНИЯ ПРЯМЫЕ МНОГОКРАТНЫЕ. Методы обработки результатов измерений. Основные положения

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

По этому ГОСТ должно использоваться математическое округление :!:

Re: Математическое округление в R

Добавлено: 13 авг 2021, 17:29
gamm
VistaSV30 писал(а):
13 авг 2021, 16:40
По ГОСТ Р 8.736-2011
какое отношение имеет российский гос к западной программе?
Note that for rounding off a 5, the IEC 60559 standard is expected to be used, ‘go to the even digit’.

Re: Математическое округление в R

Добавлено: 14 авг 2021, 03:29
Ivor
gamm писал(а):
13 авг 2021, 17:29
какое отношение имеет российский гос к западной программе?
А какое отношение имеет зарубежный стандарт к конкретной задаче конкретного человека? И вообще, стандарт <> западный стандарт, как бы ни хотелось.

Re: Математическое округление в R

Добавлено: 14 авг 2021, 06:43
VistaSV30
Python 3 тоже сейчас используется банковское округление, хотя до 2020 года в Python 2 было математическое округление. И главное в базовом Python не оставили ни каких функций с математическим округлением.

У меня заказчики работают в Excel в основном в версиях выпущенных до 2020 года, для них принципиально использовать математическое округление. И надо, чтобы мои результаты вычислений и заказчика были одинаковыми.