Odpowiedzi:
Spróbuj tego
SELECT CONVERT(DECIMAL(10,2),YOURCOLUMN)
Użyj Str()
funkcji. Zajmuje trzy argumenty (liczbę, całkowitą liczbę wyświetlanych znaków i liczbę wyświetlanych miejsc dziesiętnych
Select Str(12345.6789, 12, 3)
wyświetla: '12345.679' (3 spacje, 5 cyfr 12345, kropka dziesiętna i trzy cyfry dziesiętne (679). - zaokrągla, jeśli ma zostać obcięty, (chyba że część całkowita jest zbyt duża dla całkowitego rozmiaru, w takim przypadku zamiast tego wyświetlane są gwiazdki).
łącznie 12 znaków, z 3 po prawej stronie przecinka.
it rounds if it has to truncate
... chyba że część całkowita jest zbyt duża dla całkowitego rozmiaru, w takim przypadku zamiast tego wyświetlane są gwiazdki. Jest to wymienione w dokumentacji programuSTR
. Oto cytat z tej strony:STR(1223,2) truncates the result set to **.
Generalnie można zdefiniować dokładność liczby w języku SQL, definiując ją za pomocą parametrów. W większości przypadków będzie to NUMERIC(10,2)
lub Decimal(10,2)
- zdefiniuje kolumnę jako liczbę zawierającą łącznie 10 cyfr z dokładnością do 2 (miejsca dziesiętne).
Zmieniono dla jasności
To działa dla mnie i zawsze zachowuje ułamki dwucyfrowe
23,1 ==> 23,10
25,569 ==> 25,56
1 ==> 1,00
Cast(CONVERT(DECIMAL(10,2),Value1) as nvarchar) AS Value2
Oto jak robią to dzisiaj dzieci:
DECLARE @test DECIMAL(18,6) = 123.456789
SELECT FORMAT(@test, '##.##')
123,46
DECLARE @test DECIMAL(18,6) = 0.456789
potem SELECT FORMAT(@test, '##.##')
wraca: .46
Jak masz to, aby pokazać zero: 0.46
?
Spróbuj tego:
declare @MyFloatVal float;
set @MyFloatVal=(select convert(decimal(10, 2), 10.254000))
select @MyFloatVal
Convert(decimal(18,2),r.AdditionAmount) as AdditionAmount
Pomnóż wartość, którą chcesz wstawić (np. 2,99) przez 100
Następnie wstaw podział wyniku przez 100, dodając 0,01 na koniec:
299.01/100
Umożliwi to łącznie 10 cyfr z 2 wartościami po przecinku. Oznacza to, że może pomieścić wartość przed przecinkiem do 8 cyfr i 2 po przecinku.
Aby sprawdzić poprawność, umieść wartość w następującym zapytaniu.
DECLARE vtest number(10,2);
BEGIN
SELECT 10.008 INTO vtest FROM dual;
dbms_output.put_line(vtest);
END;