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() так глючит.
[Это сообщение - спам!]
Последние сообщения из форума
16077
|
|