title: Convert Float to Decimal (SQL Server)
body: <p>I need to convert a Float to Decimal(28,10) in SQL Server. My problem is that due to the nature of float, and the way conversions are done, simply casting the float may make it appear to be the wrong number to my users.</p>
  
  <p>For example:</p>
  
  <pre><code>Float:               280712929.22 
  Cast as Decimal:     280712929.2200000300
  What I think I want: 280712929.2200000000
  </code></pre>
  
  <p>I understand a bit about the way float works (that it's an approximate data type etc.), but admittedly not enough to understand why it adds the 300 at the end. Is it simply garbage as a side effect of the conversion, or is it somehow a more accurate representation of what the float actually stores? To me it looks like it's pulled precision out of thin air.</p>
  
  <p>Ultimately, I need it be accurate, but also to look "right." I think I need to get that bottom number, as then it looks like I've just added trailing zeroes. Is this possible? Is this a good or bad idea, and why? Other suggestions are welcome.</p>
  
  <p>Some other examples:</p>
  
  <pre><code>Float:           364322379.5731
  Cast as Decimal: 364322379.5730999700
  What I want:     364322379.5731000000
  
  Float:           10482308902
  Cast as Decimal: 10482308901.9999640000
  What I want:     10482308902.0000000000
  </code></pre>
  
  <p>Side note: the new database table that I'm putting these values into is readable by my user. They actually only need two decimal places right now, but that might change in the future so we've decided to go with Decimal(28,10). The long term goal is to convert the float columns that I'm getting my data from to decimal as well.</p>
  
  <p>EDIT: Sometimes the floats that I have have more decimal places than I'll ever need, for example: -0.628475064730907. In this situation the cast to -0.6284750647 is just fine. I basically need my result to add zeroes on to the end of the float until I have 10 decimal places.</p>