static_cast forvirring skyldes inkonsistens

stemmer
1

Hvorfor når jeg kompilere og kjøre følgende kode i Visual Studio 2008:

double value1 = 10.5;
double value2 = 15.5;
int whole_number = value1 + value2;
Console::WriteLine(whole_number);

Jeg får en feil verdi på 26, mens svaret er 25.

Men når jeg bruker statiske kaster på dobbeltrom, jeg får det rette svaret som er 25.

Hvordan kan feil effekt forklares?

Publisert på 23/11/2008 klokken 22:03
kilden bruker
På andre språk...                            


2 svar

stemmer
9

Det er helt rett.

double value1 = 10.5;
double value2 = 15.5;
int whole_number = value1 + value2; // int whole_number = 26.0;
Console::WriteLine(whole_number);

Hva forventer du i stedet? Kompilatoren evaluerer første på høyre side, og deretter implisitt konverterer til int. Dermed 26.0blir26

Når du kaster før du legger til, så du kommer til å legge til 10og 15, noe som resulterer i 25:)

Svarte 23/11/2008 kl. 22:07
kilden bruker

stemmer
2

Egentlig kan du ikke stole på flyttall til runde uansett når du gjør en automatisk konvertering. Hvis 26,0 er representert ved 26,00005, vil det bli avrundet til 26, hvis det er representert ved 25,999995, vil det bli avrundet til 25. Hvis du ønsker å være sikker, kan du bruke standard C-funksjon round, definert i math.h. Sier Dermed blir 26,0 26 er ikke helt riktig.

Svarte 23/11/2008 kl. 23:38
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more