question

sqlnewb avatar image
sqlnewb asked

Cast to decimal

This is probably an easy fix but I can't seem to get it working. select columnA, cast( (columnaA/10) as decimal (10, 5)) as NewColumn from tableA I want to divide column A by 10 but I want my new column to show the decimal places. Right now it is showing 5 deciaml places but only as zero. When I divide 3/10 I want the new column to show 0.3 but right now its just showing 0.00000
sql-server-2008tsqlcast-convert
10 |1200 characters needed characters left characters exceeded

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Kev Riley avatar image
Kev Riley answered
Cast the column before the divide select columnA, cast(columnA as decimal (10, 5))/10 as NewColumn from tableA without it, it is doing integer division 3/10 = 0 then casting that as decimal(10,5) = 0.00000
2 comments
10 |1200 characters needed characters left characters exceeded

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

@Kev Riley But this will definitely result in more than 5 decimal digits in the answer, so using 10.0 instead of 10 and only then casting to decimal(10, 5) could be a better choice.
0 Likes 0 ·
@Oleg yes it does, but I was just trying to show the OP where they had gone wrong - hopefully it will serve as a learning exercise and the OP can rework the query to suit their requirements. If 10 wasn't hard-coded and was an int variable or another column, changing it to 10.0 isn't as easy, and you would be back to casting/converting either the divisor or the dividend to a decimal type. Hopefully all the answers here show that :)
0 Likes 0 ·
Oleg avatar image
Oleg answered
This happens because your ColumnA is int and 10 is implicitly int as well. Try this instead, and you will get results you want: select columnA, cast((columnaA/10.0) as decimal (10, 5)) as NewColumn from tableA The idea is that when you divide by 10.0 rather than by 10 then you avoid the integer division because the decimals are higher in the food chain than integers. Oleg
10 |1200 characters needed characters left characters exceeded

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Mrs_Fatherjack avatar image
Mrs_Fatherjack answered
You need to cast each number to decimal as well as the total, for example: select columnA, CAST(CAST(columnaA AS DECIMAL(10,5)) / CAST(10.0 AS DECIMAL(10,5)) AS DECIMAL(10,5))as NewColumn from tableA
10 |1200 characters needed characters left characters exceeded

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.