다음 테스트를 기반으로 SharePoint는 대략 저장되어 있지만 통화 계산에 적합한 방식으로 숫자를 처리합니다 (최소한 WSS 3.0/SQL Server 2005 이상). 돈 저장 및 검색 (각각 3.7, 3.65 및 0.05를 포함
세 숫자 열 (First
, Second
및 Third
) 용
시험 : 그러나, 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
테이블을 검사
는
값이 데이터베이스에 잘못 저장되어 다음 쿼리를 실행하는 것을 보여줍니다 삽입시 번호.
왜 통화 필드를 사용하지 않습니까? –
통화 단위를 표시하고 싶지 않습니다. 통화 필드에서이 작업을 수행 할 수 있습니까? –