2012-06-26 7 views
2

사용자 입력 값과 DB 값의 두 값을가집니다.Float/Float = strange result

var userinput = form["someInput"]; 
var valuefromDB = GetValue(someNumber); 

public float? GetValue(int id){ 
return (float?) db.table.where(p=> p.id == id).select(p=> p.Value).SingleOrDefault(); 
} 

userinput은 문자열로 값 "1"을 가지며 valuefromDB 값은 float로 0.001입니다.

그래서 1/

= 1000 0.001하지만 내 C# 코드는 결과로 나에게 999.999939을 제공;

var final = float.Parse(userinput)/valuefromDB 

내가 가진

는 "2"는 사용자 입력 값으로 결과 ... 모든 소수 정확하게 ( the representation that float uses 임) 이진 표현 될 수없는 것부터

+3

이것은 플로트 정밀도의 결과입니다. – Candide

+6

모든 프로그래머는 부동 소수점 숫자를 이해해야합니다. http://en.wikipedia.org/wiki/Floating_point#IEEE_754:_floating_point_in_modern_computers – mellamokb

+0

기본 정밀도 10이 필요합니까? 기준 2가 필요합니까? –

답변

9

2,000 맞습니다. 해결책은 소수점 이하 자릿수로 결과의 서식을 지정하는 것이므로 결과가 반올림되고 "올바르게 표시"됩니다.

업데이트

:은 디스플레이를위한 float 포맷 this MSDN reference pagethis page of examples을 살펴합니다.

+0

간단한 C# 예제를 제공 할 수 있습니까? :) –

+0

@NovkovskiStevoBato : 답변을 업데이트했습니다. – Jon