Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

t-sql - uciecie do 2 miejsc po przecinku

8,051 views
Skip to first unread message

mzuberek

unread,
Mar 23, 2009, 3:46:12 AM3/23/09
to
witam

mam selecta ktory zwraca mi liczbe z dokladnoscia do 8 miejsc po przecinku,
a ja potrzebuje uciac ja do 2 miejsc po przecinku (zaokranglam do 2 miejsc
po przecinku poleceniem round) ale jak w T-SQL uciac do 2 miejsc ?

pzdrv
mzuber


Borafu

unread,
Mar 23, 2009, 5:07:49 AM3/23/09
to
mzuberek pisze:

Użyj STR

Pozdro
--
Borafu

wloochacz

unread,
Mar 23, 2009, 8:44:46 AM3/23/09
to
Borafu pisze:
Nie używaj str :)
Użyj mojego UDF'a, a będzie miał poprawnie zaokrąglone wartości, tak że
mogą nawet polecieć na drukarkę fiskalną:

<CODE>
CREATE FUNCTION dbo.ROUND2(@VALUE typ_dex_numericM, @PRECISION typ_dex_int)
-- dgrabowski 17-03-2009
-- Funkcja zaokrągla wartość do MAX 4 miejsc po przecinku (parametr
@PRECISION), zgodnie z wytycznymi fiskalnymi
RETURNS typ_dex_numericM
AS
BEGIN
set @VALUE = coalesce(@VALUE, 0);
set @PRECISION = coalesce(@PRECISION, 2);
if @PRECISION < 0 and @PRECISION > 4
set @PRECISION = 2;

if @VALUE < 0
set @VALUE = round(((@VALUE - (5.0000 / (POWER(10, @PRECISION + 1))))
* POWER(10, @PRECISION)), 0, 1) * (1.0000 / POWER(10, @PRECISION))
else
set @VALUE = round(((@VALUE + (5.0000 / (POWER(10, @PRECISION + 1))))
* POWER(10, @PRECISION)), 0, 1) * (1.0000 / POWER(10, @PRECISION))

return @VALUE;
END
</CODE>

typ_dex_numericM jest zadeklarowany jako (możesz zmienić jak CI się podoba):
CREATE TYPE [dbo].[typ_dex_numericM]
FROM decimal(19, 4) NULL
GO

Używa się tego tak:
select dbo.ROUND2(1235.5646548979, 2)

--
wloochacz

Krzysztof Naworyta

unread,
Mar 23, 2009, 9:36:20 AM3/23/09
to
mzuberek wrote:

Funkcja Round() ma 3 (słownie: TRZY) parametry :)

Select Round(1.247, 2, 1)

1.24

--
KN

Przemyslaw Osmanski

unread,
Mar 23, 2009, 9:42:18 AM3/23/09
to
Krzysztof Naworyta pisze:

A ten wynik to co to ma byc? W Polsce jesteśmy a nie w US. Chyba ze ja
czegos nie wiem...

pozdrawiam,
Przemek O.


--
SoftSYSTEM
www.soft-system.pl

Przemysław Rachwał

unread,
Mar 23, 2009, 9:56:05 AM3/23/09
to
Przemyslaw Osmanski wrote:
> Krzysztof Naworyta pisze:
>> mzuberek wrote:
>>
>> | mam selecta ktory zwraca mi liczbe z dokladnoscia do 8 miejsc po
>> | przecinku, a ja potrzebuje uciac ja do 2 miejsc po przecinku
>> | (zaokranglam do 2 miejsc po przecinku poleceniem round) ale jak w
>> | T-SQL uciac do 2 miejsc ?
>>
>> Funkcja Round() ma 3 (słownie: TRZY) parametry :)
>>
>> Select Round(1.247, 2, 1)
>>
>> 1.24
>
> A ten wynik to co to ma byc? W Polsce jesteśmy a nie w US. Chyba ze ja
> czegos nie wiem...

wynik jest w typie numerycznym
to w czym to wyświetlasz wynik obczai że to liczba i da odpowiedni znak

no chyba że przekonwertujesz do tekstu :)

--
Przemek

vbamania.blogspot.com

Przemyslaw Osmanski

unread,
Mar 23, 2009, 10:21:52 AM3/23/09
to
Przemysław Rachwał pisze:

Nie chodzi mi o znak :) ale o wynik tego 'zaokrąglenia'...
Choc przeoczylem trzecia wartosc w Round, czyli p..a a nie round tylko
trunc :)

mzuberek

unread,
Apr 1, 2009, 6:31:40 AM4/1/09
to
a ja po prostu robie to tak:

CONVERT(decimal(10,3),Round(SUM(liczba),3))

round - zaokraglam do 3 miejsc
convert-decimal - ucinam puste zera na koncu (ew. na poczatku)

pozdrawiam
mzuber

Użytkownik "mzuberek" <mzub...@gazeta.pl> napisał w wiadomości
news:gq7eem$bq$1...@inews.gazeta.pl...

> __________ Informacja programu ESET Smart Security, wersja bazy sygnatur
> wirusów 3832 (20090206) __________
>
> Wiadomosc zostala sprawdzona przez program ESET Smart Security.
>
> http://www.eset.pl lub http://www.eset.com
>
>

0 new messages