Новости | Документация | Download | Webboard | FAQ | Поиск | Контакты

Apache.RU - Webboard



Вернуться
Бухгалтерия (Visor123) 09/07 - 11:10:07
      Re: А как они округляются? (Marat_L) 09/07 - 12:46:02
      Re: Озверели что ли??? (Alec) 09/07 - 15:08:18
      Re: Озверели что ли??? (Валентин) 09/07 - 15:38:54
      Re: /// (Валентин) 09/07 - 15:42:31
      Re: .... (Валентин) 09/07 - 15:51:46
      Re: Где можно почитать про такое округление? (Marat_L) 09/07 - 16:32:02
      Re: Где можно почитать про такое округление? (Dinky) 09/07 - 23:41:42
      Re: Почитать (Валентин) 10/07 - 10:58:24
      Re: Ну так как господа матерые программеры? (Валентин) 10/07 - 11:03:42
      Re: Ну так как господа матерые программеры? (Marat_L) 12/07 - 08:40:45
      Re: -> Marat_L (Валентин) 12/07 - 10:45:49
      Re: -> Marat_L (Marat_L) 12/07 - 11:06:20
      Re: select round(3.555,2); выдает 3,55 ???? (Marat_L) 12/07 - 11:10:14
      Re: -> Marat_L (Валентин) 12/07 - 13:16:42
      Re: Спасибо, буду читать (Marat_L) 12/07 - 14:06:19
      Re: В Stored function это выглядит так (Валентин) 12/07 - 15:46:14
      Re: Я понял!!! (Marat_L) 12/07 - 16:09:06
      Re: Ну так как господа матерые программеры? (walrus) 12/07 - 17:13:41
      Re: -> walrus, Marat_L (Валентин) 13/07 - 10:31:49
      Re: -> walrus, Marat_L (Marat_L) 13/07 - 12:05:51
      Re: Неверное округление!!!! Откопал!!! (Marat_L) 13/07 - 15:33:33
      Re: Спасибо. (Валентин) 13/07 - 16:49:56
      Re: Можно, в принципе, переписать сам ROUND (Marat_L) 14/07 - 15:15:43
      Re: Можно, в принципе, переписать сам ROUND (Валентин) 14/07 - 16:13:16
      Re: Можно, в принципе, переписать сам ROUND (Dinky) 14/07 - 18:11:04

> Original message text:
> From: > Visor123 - 09/07 - 11:10:07
> Subject:Бухгалтерия
> -----------------
> Кто-нибудь делал или знает где взять функцию под MySQL для округления бухгалтерских сумм, аналог round, но в бухгалтерии суммы к копейкам округляются не математически...
>


From: Marat_L - 14/07 - 15:15:43
Subject:Можно, в принципе, переписать сам ROUND
-----------------
Если скачать исходники, то можно переписать саму функцию округления.

Она находится в sql/item_func.cpp
И выглядит так

==========================================
double Item_func_round::val()
{
double value=args[0]->val();
int dec=(int) args[1]->val_int();
uint abs_dec=abs(dec);
double tmp;
/*
tmp2 is here to avoid return the value with 80 bit precision
This will fix that the test round(0.1,1) = round(0.1,1) is true
*/
volatile double tmp2;

if ((null_value=args[0]->null_value || args[1]->null_value))
return 0.0;
tmp=(abs_dec < array_elements(log_10) ?
log_10[abs_dec] : pow(10.0,(double) abs_dec));

if (truncate)
{
if (value >= 0)
tmp2= dec < 0 ? floor(value/tmp)*tmp : floor(value*tmp)/tmp;
else
tmp2= dec < 0 ? ceil(value/tmp)*tmp : ceil(value*tmp)/tmp;
}
else
tmp2=dec < 0 ? rint(value/tmp)*tmp : rint(value*tmp)/tmp;
return tmp2;
}

==========================================

Впринципе можно всю логику переписать. Как компилировать под виндовс в мануале написано. Наверное несложно.

Судя по коду похоже сишная функция rint() так глючит.




[Это сообщение - спам!]

Последние сообщения из форума

 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
16077




  Copyright Apache.ru © 1999-2017, All Rights Reserved Разработка сайта: Inside.ru  
  РЕКЛАМА НА САЙТЕ: |