Full precision output of floating point types in SQL Server Management Studio

后端 未结 3 686
北海茫月
北海茫月 2020-12-06 18:08

I have the value 1555.4899999999998 stored in a float column with default precision (53). When I do a simple select, SSMS rounds the

相关标签:
3条回答
  • 2020-12-06 18:23

    Edit to my original post. I was trying to solve a slightly different problem when I ran across this page. I just wanted a float type to return a "regular" number, not scientific notation.

    Suggested two converts originally. Wound up with this in then end. The 7 below could be changed to show as many decimal places as you would like. Replace and trims get rid of leading and trailing zeroes.

    REPLACE(RTRIM(LTRIM(REPLACE(STR(x, 20, 7),'0',' '))),' ','0')

    0 讨论(0)
  • 2020-12-06 18:39

    Is there a reason you would rather use a float type than a decimal type? Floats are stored as fractions, which causes them to often be slightly innacurate when doing operations on them. This is okay when you have a graphics application where the innaccuracy is much less significant than the size of a pixel, but it's a huge issue in something like an accounting application where you're dealing with money.

    I would venture to say that the accuracy of a decimal is more important to most applications than any benefit in speed or size they would get from using a float.

    0 讨论(0)
  • 2020-12-06 18:41

    No.

    SQL Server Management Studio rounds floating point values for display purposes; there is a Connect suggestion to change this behavior, but it is closed "as By Design". (Microsoft Connect, a public issue tracker for Microsoft software has been retired)

    However, SQLCMD, osql and the Query Analyzer do not.

    SQLCMD -E -S server -Q"SELECT CONVERT(FLOAT, 1555.4899999999998)"
    
    0 讨论(0)
提交回复
热议问题