이중 십진수 변환

I want to use a 추적되도록 표시줄에는 form& 변경할 수 있는 # 39 의 불투명도의.

이건 내 코드:

decimal trans = trackBar1.Value / 5000;
this.Opacity = trans;

When I 애플리케이션 구축, 이를 통해 다음 오류:

&gt. '더블' 유형 '소수' 을 암시적으로 변환할 수 없습니다.

그런데 '와' 더블 '찾았다' 트랜스 사용하여 제어 doesn& # 39, 빗나갔다. 이 코드는 과거 프로젝트 (VB.NET) 에서 협력했습니다 좋아요.

질문에 대한 의견 (2)
해결책

39 를 '더블' 이 필요한 isn& 같은 명시적인 캐스트, t:

double trans = (double) trackBar1.Value / 5000.0;

'' ('과' 5000d) 는 충분하나니 5000.0 상수입니다 식별하면 있다.

double trans = trackBar1.Value / 5000.0;
double trans = trackBar1.Value / 5000d;
해설 (0)

일반 질문에 대한 답을 &quot 더 일반적이고, 소수점 vs 연산뿐? ": , 통화 계산이므로 보존하기 위한 소수점 계산에 의해 영향을 받을 수 없는 과학 precisiontm 연산뿐 작은 차이를 보인다. 이는 이후 기능을 CPU 는 두 번 유형 (내부 표현이 저장됩니까 기본 2) 에서 만든 계산이므로 연산뿐 성능 향상, 그리고 소수, 즉 개설되어 기본 10 내부적으로).

해설 (0)

때문에 모든 방송, c # 의 코드에 협력했습니다 벌금 (VB.NET) 가 동시에 암시적입니다 및 명시성 암시적으로 모두 가지고 있는 것으로 나타났다.

C # 에서 더블 는 십진수 변환 명시성 tpc. 패배하셨습니다 설치한다. 예를 들어, t be 정확하게 표현할 수 있지만, 1.1 can& # 39 로 연산뿐 소수로 (http://otl. " 부동 소수점 숫자 - 당신이 생각하는 것보다 더 많은 부정확한 &quot. 선택한 이유에 대해).

Vb 변환) 에 의해 컴파일러와의 당신꺼에요 추가되었다.

decimal trans = trackBar1.Value / 5000m;
this.Opacity = (double) trans;

That ' (실수)' 에 명시된 명시적으로 수 있지만, C # # 39, & # 39 에 의해 수 어떤 VB& 더 forgiving& # 39. 컴파일러.

해설 (0)

왜 의해 분할하는 5000δ? 그냥 # 39 의 최소값과 최대값보다 TrackBar& 설정 후 100 에 의해 값이 100 0-사이의 나누기 불투명도입니다 (%) 입니다. 예 인해 최소 20 양식이 완전히 보이지 않게 되었다.

private void Form1_Load(object sender, System.EventArgs e)
{
    TrackBar1.Minimum = 20;
    TrackBar1.Maximum = 100;

    TrackBar1.LargeChange = 10;
    TrackBar1.SmallChange = 1;
    TrackBar1.TickFrequency = 5;
}

private void TrackBar1_Scroll(object sender, System.EventArgs e)
{
    this.Opacity = TrackBar1.Value / 100;
}
해설 (1)

두 가지 문제가 있습니다. 첫째, '아닌' 불투명도의 소수점 값을 연산뿐 필요합니다. 컴파일러는 간의 변환을 알리는 것은 그곳에 있는 동안 는 십진수 변환 및 연산뿐 위해서 필요한 것을 직접 지정할 수 있는 것이다. 두 번째는 'that' 은 정수 값 및 나누기 트레이크바리발루 충족되었으며 int 가 어떤 유형의 변수 int 아무리 너회가 할당하십시오 int 발생합니다. 이 경우 문제가 발생할 수 없기 때문에 암시적입니다 int 의 소수점 또는 더블 캐스팅 작업을 할 때 precisiontm 손실됩니다 출연진 - - 그래서 컴파일러와의 doesn& 않지만 값이 항상 0 # 39, 불평, t, 아마도, 이후 '항상' 트레이크바리발루 확보하십시오 미만임 5000δ. 이 솔루션은 변경하십시오 연산뿐 사용하도록 코드를 통해 부동 소수점 연산을 할 수 있도록 (넷윈을 유형을 불투명도의) 와 명시적으로 상수입니다 더블 캐스팅 '는 산술 - 또는 - 어떤 효과를 낳을 것이라고 프로모션하면 트레이크바리발루 -또는 같은 일을 할 수 있는' 가 두 번 모두. 아, 진실이며당신이 don& # 39, 다른 곳에서 사용할 경우를 제외하고 중간 가변으로 필요한 건 아니다. 내 생각엔 컴파일러는 다시그것들을 최적화합니다 거두어 어쨌든.

trackBar.Opacity = (double)trackBar.Value / 5000.0;
해설 (0)

제 생각에는, 것은 바람직한 것으로 명시성 수 있다. 이로 인하여 결국 이를 읽을 수 있는 코드를 프로그래머가 선명도를 높이기, 에이즈 너회의 명예직원.

외에 추가 '.0' (또는 대신에) 수 () ',' 데키말스토둘블 사용할 수 있습니다.

몇 가지 예를 들면 다음과 같습니다.

// Example 1
double transperancy = trackBar1.Value/5000;
this.Opacity = decimal.ToDouble(transperancy);

// Example 2 - with inline temp
this.Opacity = decimal.ToDouble(trackBar1.Value/5000);
해설 (0)

이 말은 '더블' 은 티스트로파시 doesn& # 39, 가치, 컴파일러는 마음에 하려고 크램 소수점 값을 다르거든요.

해설 (0)

5000.0 콩지름에 '' 대신 '5000δ'.

해설 (0)

불투명도의 이 속성은 이중 유형:

double trans = trackBar1.Value / 5000.0;
this.Opacity = trans;

또는 단순히:

this.Opacity = trackBar1.Value / 5000.0;

또는:

this.Opacity = trackBar1.Value / 5000d;

지금 사용하고 있는 '디이브이 5000.0' (또는 '5000d') 때문에 강제로 연산뿐 부 'trackBar1.Value' 은 정수 및 정수 사단, 그 결과 수행할 것이라고 약간만이라도 정수.

해설 (0)

윈포름스 사용하고 있다고 가정하고, ['포르마리오파시'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.form.opacity.aspx) 형식은 '더블' 도왔으매 콩지름에:

double trans = trackBar1.Value / 5000.0;
this.Opacity = trans;

39 의 값을 하는 경우를 제외하고, it& 간단해진다는 다른 곳에 쓸:

this.Opacity = trackBar1.Value / 5000.0;

39 변경한 것은 단순히 코드 될 때, t 작동합니까 제어입니다 doesn& 연산뿐 못했기 때문이라고 했습니다.

double trans = trackbar1.Value / 5000;

'해석' 이 있는 데다 trackbar1.Value 정수 값을 정수로 5000δ '도' 네 '트랜스' 파르타잔 항상 영. 부동 소수점 값을 숫자 '.0' 하는 의해 명시적으로 추가하여 컴파일러 및 수행 과정에서 두 번 해석할 수 있게 된 것이다.

해설 (0)

최적의 솔루션이라는:

this.Opacity = decimal.ToDouble(trackBar1.Value/5000);
해설 (0)

'더블' 은 이후 불투명도와 연산뿐 가치, 난 그냥 초기부터 전혀 사용하지 않고 있지만, 더블 캐스팅 사용해야 합니다 그래서 니말은 don& # 39 석, t 느슨해짐 때 모든 precisiontm

Opacity = trackBar1.Value / 5000.0;
해설 (0)
this.Opacity = trackBar1.Value / 5000d;
해설 (0)