2009-11-06 4 views
2

SharePoint에서 '번호'유형의 목록 열을 만들 수 있습니다. 화폐 금액을 저장해야하며 새 열을 생성하지 않고이 열 유형을 사용할 수 있기를 원합니다.통화 값을 저장하기 위해 셰어 포인트 번호 열 유형을 사용해야합니까?

정확도 상실을 방지하기 위해 (예 : 일종의 근사 부동 소수점 형식이 아닌)이 유형의 값이 SharePoint에 저장되고 조작됩니다 (예 : 목록보기에서 값 합계).

통화 열을 살펴 봤지만 응용 프로그램에서 이해할 수없는 통화 단위를 강제로 표시하는 것 같습니다. 그리고 보닛 아래에 '숫자'로 저장되었다는 의혹이 있습니다.

+0

왜 통화 필드를 사용하지 않습니까? –

+0

통화 단위를 표시하고 싶지 않습니다. 통화 필드에서이 작업을 수행 할 수 있습니까? –

답변

7

다음 테스트를 기반으로 SharePoint는 대략 저장되어 있지만 통화 계산에 적합한 방식으로 숫자를 처리합니다 (최소한 WSS 3.0/SQL Server 2005 이상). 돈 저장 및 검색 (각각 3.7, 3.65 및 0.05를 포함

세 숫자 열 (First, SecondThird) 용

시험 : 그러나, 15 상당한 수치 값은 반올림 오류 나타낼 수있다. Net 예 : here) 및 다음 수식을 사용하여 계산 된 열 (단일 텍스트 줄 반환) : =IF(First=Second+Third,"Success","Failure"). 목록을 볼 때 계산 된 열은 성공을 표시합니다. 화학식 =0.1+0.1+0.1=0.3 (here 닷넷 예)와

예/아니오 계산 열 돈 계산

시험. 목록을 볼 때 계산 된 열은 을 표시합니다. 돈 저장 및 계산을위한

테스트 나는 목록에서

는 사용자 지정 숫자 열 (CustomNumber가) (Microsoft White Paper에서 SQL 서버 예) 304253.3251을 포함, TestList했다. 이 데이터베이스 테이블 AllUserData,(SQL Server 2005)의 float1 열에 저장됩니다. float은 대략적인 데이터 형식입니다.

실행 다음과 같은 쿼리 : 30425332510000002 실제로 디스플레이의 잘못된 값을 표시 할 것으로 예상 할 수있는 공식 =CustomNumber*100000000000으로 계산 된 열을 만들기

CustomNumber 
304253.32510000002 

CustomNumber 
304253.3251 

:

DECLARE @ListName UNIQUEIDENTIFIER 
SET @ListName = (SELECT tp_Id FROM AllLists WHERE tp_Title = 'TestList') 

SELECT CAST(float1 as NUMERIC(18, 11)) AS CustomNumber 
FROM AllUserData 
WHERE tp_ListId = @ListName 

SELECT float1 AS CustomNumber 
FROM AllUserData 
WHERE tp_ListId = @ListName 

다음과 같은 결과를 제공합니다 올바른 (사용자 관점에서) 값은 30,425,332,510,000,000.00000입니다.이 동작은 float 값을 소수 자릿수가 적당히 작은 numeric으로 캐스팅을 수행하고 .Net Decimal 형식을 사용하여 메모리에서 값을 조작하는 것으로 인해 발생한다고 가정합니다.

suggestions이 있지만 버전간에 float 값의 동작이 변경 되었기 때문에이 경우 SQL Server 2000 계산 오류가 발생할 수 있습니다. 9999999999999999.

이 16 중요한 자리 값이 에 잘못 표시 다음 CustomNumber 열에 다음 값을 추가 이전 테스트의 결과를 바탕으로 돈 저장 및 검색 II

에 대한

테스트 목록 (및 편집) 뷰는 10000000000000000 (15 자리 숫자를 올바르게 사용)을 표시합니다.

10000000000000000 

SQL Server가 반올림되는 것을 보여줍니다

DECLARE @f FLOAT 
SET @f = 9999999999999999 
SELECT CAST(@f as NUMERIC(20, 0)) 

이 결과를 제공합니다 다음 AllUserData 테이블을 검사

값이 데이터베이스에 잘못 저장되어 다음 쿼리를 실행하는 것을 보여줍니다 삽입시 번호.

0

숫자는 그런 식으로 사용해야합니다. 예. 값을 합산 할 때 정밀도가 떨어지는 데 아무런 문제가 없어야합니다.

+0

이것을 확인하는 참조 문서 (MSDN?)가 있습니까? –

+0

소년, 너는 나에게 수락을 위해 일하게 만들거야, 그렇지? 아니요, 그런 문서는 없습니다. 나는 Currency와 Number가 SQL Server에 double 형으로 저장되어 있다고 믿습니다. 돈을 위해 사용되는 값의 범위를 사용하면 double에 의해 뒷받침 될 때 어떤 정밀도 문제도 발생하지 않습니다. –

+0

돈을 위해 두 배를 사용하는 것은 일반적으로 나쁜 생각입니다 (예를 들어, http://stackoverflow.com/questions/316727/is-a-double-really-unsuitable-for-money 참조) ... –