이 간단한 수학 결과에 10 진수, 플로트 또는 더블을 사용해야합니까?

StackOverflow https://stackoverflow.com/questions/340270

문제

정말 간단한 수학을하고 결과를 MS SQL2008 DB에 저장하고 있습니다.

나는 평균화 1 <-> 5 사이의 바이트 값 인 일부 숫자. 나는 아마도 2 자리 자리 만 기록하고 싶습니다. 나는 두 번째 소수점의 반올림에 신경 쓰지 않습니다 (예 : 1.155 == 1.5 또는 1.6 .. 나는 너무 단계적이지 않습니다).

그래서 .. 평균 결과를 플로트, 소수점 또는 두 배로 저장해야합니까?

LINQ 반환이 무엇인지 확인하면 세 값을 모두 반환 할 수 있습니다!

마지막으로, 관련 SQL Datatype 필드도 무엇입니까?

건배!

도움이 되었습니까?

해결책

필요한 것은 10 진수 데이터 유형입니다.

declare @val decimal(10,2)
select @val = 10.155
select @val

값을 입력하면 내장 반올림에 의존하거나 원하는 반올림을 명시 적으로 결정할 수 있습니다.

select val = round(10.155, 2, 0) -- rounded
select val = round(10.155, 2, 1) -- truncated

소수점 (10,2)은 10 자리 숫자를 사용할 수 있고 그 중 2 자리가 소수점 이후에있는 것으로 간주되어야한다는 것을 의미합니다. 즉 소수점 (4,2)에 포함 할 수있는 가장 높은 숫자는 99.99입니다. 100으로 설정하려고하면 산술 오버플로가 발생합니다.

다른 팁

나는 두 배로 플로트를 선택하고 아마도 소수점 위로 플로트를 선택할 것입니다. ID는 모두 동일한 결과를 제공해야합니다.

이 두 페이지를 살펴보십시오 부유물 & 소수

10 진수는 주로 통화에 사용됩니다. 그것이 효과가 있지만 사람들은 혼란 스러울 수 있습니다. 이 경우 플로트가 더 나은 선택이라고 생각합니다.

소수 - 가장 단순하지만, 어떤 중 하나라도 일을 할 것입니다.

가능한 한 적은 공간을 사용하여 결과를 저장하려면 다음과 같은 일을 할 수 있습니다 (pseudocode).

integer = ( sum(all_values) / all_values.count().float ) * 100;

이렇게하면 평균 3.52의 값 352를 제공하므로 정수로 저장할 수 있습니다 (바이트는 충분히 커질 것입니다).

반면에 평균 값의 저장에 신경 쓰지 않으면 플로트 값을 사용하는 것이 더 빠를 수 있습니다. (시스템에서 실제로 가장 빠른 것을 보려면 둘 다 테스트하십시오.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top