Zakładając, że zapytano o to w wywiadzie - dzielenie liczb całkowitych zawsze skutkuje liczbą całkowitą. Musisz użyć rzutowania typu takiego jak pokazano poniżej.
Nie wiem, czy jest tak samo w C #, ale C wymaga tylko pierwszego rzutu - automatycznie zrobi double / int podwójnym.
paxdiablo
4
@Pax, Jeśli którykolwiek z argumentów w C lub C # jest podwójny, stosowany jest podwójny podział (w wyniku podwójny).
strager
32
Uważaj, aby tego nie zrobić: - double num3 = (double)(num1/num2);. To da ci podwójną reprezentację wyniku podziału liczb całkowitych!
The Lonely Coder,
Zakładając, że nie potrzebujesz dodatkowej precyzji, czy jest powód, aby rzucić na nią doublezamiast float? Widzę pytania wymagające, doubleale i tak jestem ciekawy.
Kyle Delaney
@KyleDelaney Po prostu dlatego, że w C # zwykle używamy, doublea nie float. Kiedy piszesz zmienną taką jak var a = 1.0;ta, 1.0 zawsze jest double. To chyba główny powód.
this.myself
31
Uzupełnienie odpowiedzi @ NoahD
Aby mieć większą precyzję, możesz rzutować na dziesiętne:
Przedstawione są podwójne przydzielające 64 bity, podczas gdy dziesiętne używa 128
(double)100/863//0.11587485515643106
Dogłębne wyjaśnienie „precyzji”
Aby uzyskać więcej informacji na temat reprezentacji zmiennoprzecinkowej na binarny i jego precyzji przyjrzeć tym artykule od Jon Skeet gdzie mówi o floatsi doublesa ten jeden , gdzie mówi o decimals.
Źle! doublema precyzję 53 bitów i jest to binarny format zmiennoprzecinkowy, podczas gdy decimaljest ... dziesiętny, oczywiście z 96 bitami precyzji . doubleJest więc dokładny do ~ 15-17 cyfr dziesiętnych i 28-29 cyfr dziesiętnych (i nie dwukrotnie więcej niż precyzja double). Co ważniejsze, decimalfaktycznie używa tylko 102 ze 128 bitów
phuclv
Dzięki @phuclv, naprawiłem to. Miałem na myśli „przydział miejsca”. Miałeś rację co do precyzji decimals(96), ale doublesma 52 bity mantysy , a nie 53.
Odpowiedzi:
Chcesz rzucić liczby:
Uwaga: Jeśli którykolwiek z argumentów w języku C # jest a
double
,double
używany jest podział, który daje w wynikudouble
. Więc działałyby również:Aby uzyskać więcej informacji zobacz:
Dot Net Perls
źródło
double num3 = (double)(num1/num2);
. To da ci podwójną reprezentację wyniku podziału liczb całkowitych!double
zamiastfloat
? Widzę pytania wymagające,double
ale i tak jestem ciekawy.double
a niefloat
. Kiedy piszesz zmienną taką jakvar a = 1.0;
ta, 1.0 zawsze jestdouble
. To chyba główny powód.Uzupełnienie odpowiedzi @ NoahD
Aby mieć większą precyzję, możesz rzutować na dziesiętne:
Lub:
Przedstawione są podwójne przydzielające 64 bity, podczas gdy dziesiętne używa 128
Dogłębne wyjaśnienie „precyzji”
Aby uzyskać więcej informacji na temat reprezentacji zmiennoprzecinkowej na binarny i jego precyzji przyjrzeć tym artykule od Jon Skeet gdzie mówi o
floats
idoubles
a ten jeden , gdzie mówi odecimals
.źródło
double
ma precyzję 53 bitów i jest to binarny format zmiennoprzecinkowy, podczas gdydecimal
jest ... dziesiętny, oczywiście z 96 bitami precyzji .double
Jest więc dokładny do ~ 15-17 cyfr dziesiętnych i 28-29 cyfr dziesiętnych (i nie dwukrotnie więcej niż precyzjadouble
). Co ważniejsze,decimal
faktycznie używa tylko 102 ze 128 bitówdecimals
(96), aledoubles
ma 52 bity mantysy , a nie 53.rzuć liczby całkowite do liczby podwójnej.
źródło
Przekształć jeden z nich w podwójny. Ten formularz działa w wielu językach:
źródło
var result = 1.0 * a / b;
źródło
double
a niedecimal
.