Michael Meadows EDIT 2과 동등하지만, VB.NET에서 시도한 결과가 다릅니다. (특히 Double
및 Decimal
결과 모두 600000.0238418580이었다.)단일 상수를 런타임과 동일하게 얻으십시오.
I의 차이는 컴파일 시간 A를 Single
에 저장된 Single
분할 정밀도 때 런타임에 발생하는 분열을 강제 함께 결정했다.
const ONE_MILLION As Integer = 1000000
Dim THREEsng As Single = 3!
Dim FIVEsng As Single = 5!
Dim vTHREE_FIFTHS As Single = THREEsng/FIVEsng
const THREE_FIFTHS As Single = 3!/5!
Console.WriteLine("Three Fifths: {0}", THREE_FIFTHS.ToString("F10"))
Dim asSingle As Single = 0!
Dim asDouble As Double = 0#
Dim asDecimal As Decimal = [email protected]
For i As Integer = 1 To ONE_MILLION
asSingle += CSng(THREE_FIFTHS)
asDouble += CDbl(THREE_FIFTHS)
asDecimal += CDec(THREE_FIFTHS)
Next
Console.WriteLine("Six Hundred Thousand: {0:F10}", THREE_FIFTHS * ONE_MILLION)
Console.WriteLine("Single: {0}", asSingle.ToString("F10"))
Console.WriteLine("Double: {0}", asDouble.ToString("F10"))
Console.WriteLine("Decimal: {0}", asDecimal.ToString("F10"))
Console.WriteLine("vThree Fifths: {0}", vTHREE_FIFTHS.ToString("F10"))
asSingle = 0!
asDouble = 0#
asDecimal = [email protected]
For i As Integer = 1 To ONE_MILLION
asSingle += CSng(vTHREE_FIFTHS)
asDouble += CDbl(vTHREE_FIFTHS)
asDecimal += CDec(vTHREE_FIFTHS)
Next
Console.WriteLine("Six Hundred Thousand: {0:F10}", vTHREE_FIFTHS * ONE_MILLION)
Console.WriteLine("Single: {0}", asSingle.ToString("F10"))
Console.WriteLine("Double: {0}", asDouble.ToString("F10"))
Console.WriteLine("Decimal: {0}", asDecimal.ToString("F10"))
이을 강조 표시된 차이와 그 결과는 다음과 같습니다 :
세 다섯째 : 0.6000000000
육백 천 : 600000.0000000000
그래서, THREE_FIFTHS
및 vTHREE_FIFTHS
는 asDecimal
요약에 대해 서로 다른 결과를 제공 싱글 : 599093.4000000000
더블 : 600000 0.0238418580
진수 : 600000.0238418580
vThree 다섯째 : 0.6000000000
육백 천 : 600000.0000000000
싱글 : 599093.4000000000
더블 : 600000.0238418580
진수 : 600000.0000000000는
내 질문은 당신이 얻을 수있다 VB.NET은 런타임 결과와 동일한 Const Single
표현식을 얻으려고합니까? an answer to my similar question for C#에서 지적했듯이, 컴파일 타임 상수가 정말 일정하지으로 "그것을 할 수 없다"(즉, vTHREE_FIFTHS
같은 결과와 THREE_FIFTHS
을 생산하고 있습니다.)