Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to cast float as a decimal without rounding and preserving its precision?

So it appears that if you

CAST(field1 as decimal) field1 

this will automatically add rounding.

The original is defined as:

field1 type:float length:8 prec:53

I need to cast it to decimal, because I need my Entity Framework layer to generate this field as decimal (instead of double).

Is there a way to cast it as decimal, so that it preserves original precision, and doesn't round?

I would like to avoid having to declare the precision in the cast, because:

  1. there are 100's of fields involved with varying precision, and;
  2. if the underlying table changes in the future, it could cause unforeseen bugs to emerge, and;
  3. makes the management more difficult.
like image 861
Sonic Soul Avatar asked Nov 12 '10 22:11

Sonic Soul


1 Answers

Have you tried:

SELECT Cast( 2.555 as decimal(53,8)) 

This would return 2.55500000. Is that what you want?

UPDATE:

Apparently you can also use SQL_VARIANT_PROPERTY to find the precision and scale of a value. Example:

SELECT SQL_VARIANT_PROPERTY(Cast( 2.555 as decimal(8,7)),'Precision'), SQL_VARIANT_PROPERTY(Cast( 2.555 as decimal(8,7)),'Scale') 

returns 8|7

You may be able to use this in your conversion process...

like image 123
Abe Miessler Avatar answered Sep 23 '22 21:09

Abe Miessler