2013-07-02 2 views
0

SQL Server에는 FloatValueFloat 데이터 유형의 열이있는 테이블이 있습니다.
나는이 방법과 WCF 서비스에서이 값을 업데이트합니다잘못된 플로트 데이터가 삽입되었습니다.

public int UpdateConfig(float value) 
    { 
     try 
     { 
      using (SqlConnection conn = GetConnection(DbName.Temp)) 
      { 
       conn.Open(); 
       string command = @"UPDATE ConfigTable SET FloatValue = @value"; 
       using (SqlCommand cmd = new SqlCommand(command, conn)) 
       { 
        cmd.Parameters.AddWithValue("@value", value); 
        int res = cmd.ExecuteNonQuery(); 
        return res; 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      return 0; 
     } 
    } 

내 문제는되도록 같은이 방법을 호출 할 때 :

UpdateConfig(1.1); 

과 같은 select 문 :

SELECT ConfigTable.FloatValue From ConfigTable 

은 다음 값을 반환합니다. 1.10000002384186

이 값을 SSMS에서 직접 업데이트하면 올바른 데이터가 업데이트되고 있습니다.
어떻게 해결할 수 있습니까?

+0

아마도 코드에서'double'을 사용해야합니다. 자세한 내용은 http://stackoverflow.com/a/1209190/858757을 참조하십시오. – Silvermind

+0

가능한 [SQL 서버에서 숫자, 부동 소수점과 소수 사이의 차이] (http://stackoverflow.com/questions/1056323/difference-between-numeric-float-and-decimal-in-sql-server) – CodeCaster

답변

0

이것은 float 값으로 예상됩니다. 부동 소수점 값은 정확한 값이 아니므로 1.1 값은 실제로 1.10000002384 값으로 나타낼 수 있습니다.

괜찮 으면 한 가지 해결책은 값을 1 또는 2 자리로 반올림하는 것입니다. 또 다른 해결책은 대신 Decimal과 같은 고정 소수점 숫자 형식을 사용하는 것입니다.

편집 :
실제로 십진수는 고정 된 정밀도는 아니지만 대부분의 사용 사례에 충분히 근접합니다. 이러한 차이에 대한

0

이유는 FLOAT SQL Server의 (N를 지정하지 않고이) 실제로 가까이 double 유형의 C#에서 float 유형보다 정밀도를 가지고 있다는 것입니다. double을 C# 코드에 사용하면 표시되는 불일치를 제거해야합니다.

관련 문제