2014-09-24 7 views
-1

최근에 속성을 double에서 decimal로 변경하여 이상한 효과를 발견했습니다. 속성에서 반환 된 모든 숫자가 잘립니다.C# 10 진수 속성 의도하지 않은 잘림

private int _SalesPrice; 

// [ ... ] 

public decimal SalesPrice 
{ 
    get { return Convert.ToDecimal(_SalesPrice/1000); } 
    set { _SalesPrice = Convert.ToInt32(value * 1000); } 
} 

그때 내 코드에서이 같은 경우 :

는 코드의 일부이다

SalesPrice = 5.98 

_SalesPrice가 5980됩니다 만 SalesPrice없이 소수와 5를 반환합니다.

그 이유는 무엇입니까? 대신 대신 십진수을 사용하면됩니다.

return _SalesPrice/1000M; 
+2

INT A = 1,000분의 5,980 = 5 – chouaib

+1

진수 A = 1,000분의 5,980 = 5 –

+0

'리턴 (진수) _SalesPrice/1000;' –

답변

2

을 사용하고

정수, 즉 잘린. 분할 전에 변환하십시오.

여기에 Convert을 사용할 필요는 없습니다. 일반 캐스트 만 사용하십시오.

0
return Convert.ToDecimal(_SalesPrice/1000); 

당신은 이후에 수행 될 부문, 진수로 변환하고 : 나는 당신이 대신 소수의, 정수 나눗셈을하고있는 VS2010

0

int로 int를 나누기 때문에 값이 잘립니다. 10001000.0으로 변경하십시오. 그것을 두 배로 나누면 나누기 전에 변환됩니다.

public decimal SalesPrice 
{ 
    get { return Convert.ToDecimal(_SalesPrice/1000.0); } 
    set { _SalesPrice = Convert.ToInt32(value * 1000.0); } 
} 
0

당신이 getter에 integer division을하고 있기 때문에 강력히 의심됩니다. 항상 분수 부분을 삭제합니다.

.

하나의 옵션은 정수 나누기를 부동 소수점 나누기로 변경할 수 있습니다.

get { return Convert.ToDecimal(_SalesPrice/1000.0); } 
+4

@Downvoter는 적어도 내가 어디서 잘못 될지 알 수 있도록 신경을 써야합니까? –