Mam tę prostą kalkulację powracającego do zera nie może zrozumieć toDivision zwraca zerowy
decimal share=(18/58)*100;
Mam tę prostą kalkulację powracającego do zera nie może zrozumieć toDivision zwraca zerowy
decimal share=(18/58)*100;
Tutaj pracujesz z liczbami całkowitymi. Spróbuj użyć liczb dziesiętnych dla wszystkich liczb w swoich obliczeniach.
decimal share = (18m/58m)*100m;
18/58
jest podział całkowitą, co skutkuje 0.
Jeśli chcesz podział dziesiętny, trzeba Aby użyć literału dziesiętnego:
decimal share = (18m/58m) * 100m;
Cóż, to dla mnie nowość, po prostu podążałem za kalkulatorem. –
Ponieważ liczby są liczbami całkowitymi i wykonujesz podział liczb całkowitych.
18/58
to 0
w części całkowitej.
udział dziesiętny = (18 * 100)/58;
Ponieważ niektóre osoby łączą się z tym z praktycznie dowolnego wątku, w którym wynik obliczenia wynosi 0, dodaję to jako rozwiązanie, ponieważ nie wszystkie inne odpowiedzi dotyczą scenariuszy przypadku.
Pojęcie potrzeby wykonywania obliczeń na różnych typach w celu uzyskania tego typu w wyniku ma zastosowanie, jednak powyżej pokazuje tylko "dziesiętny" i używa jego krótkiej formy, takiej jak 18m
jako jednej ze zmiennych, które mają zostać obliczone.
// declare and define initial variables.
int x = 0;
int y = 100;
// set the value of 'x'
x = 44;
// Results in 0 as the whole number 44 over the whole number 100 is a
// fraction less than 1, and thus is 0.
Console.WriteLine((x/y).ToString());
// Results in 0 as the whole number 44 over the whole number 100 is a
// fraction less than 1, and thus is 0. The conversion to double happens
// after the calculation has been completed, so technically this results
// in 0.0
Console.WriteLine(((double)(x/y)).ToString());
// Results in 0.44 as the variables are cast prior to calculating
// into double which allows for fractions less than 1.
Console.WriteLine(((double)x/(double)y).ToString());
Ilekroć spotykamy takie sytuacje, po prostu uskok liczniku.
double x = 12.0/23409;
decimal y = 12m/24309;
Console.WriteLine($"x = {x} y = {y}");
Nie jest z natury jasne, dlaczego literał "18" jest wkompilowany w liczbę całkowitą. Aby wyjaśnić, zgodnie ze specyfikacją językową (struktura leksykalna> tokeny> literały), każdy literał zapisany za pomocą "cyfr dziesiętnych" od 0 do 9 to [Liczba liter całkowitych] (https://msdn.microsoft.com/en-us/library/aa664674 (v = vs.71) .aspx), który kompiluje się w "pierwszy z tych typów, w którym może być reprezentowana jego wartość:' int', 'uint',' long', 'ulong'.", po dodaniu " m "przyrostek literału jest teraz postrzegany jako [Prawdziwa literatura] (https://msdn.microsoft.com/en-us/library/aa691085 (v = vs.71) .aspx), który kompiluje się jako typ" dziesiętny ". – Quantic
Przykład: 'var check = (1/(dziesiętna) 7) * 100 = 14.285714' rzucenie mianownika na dziesiętną rozwiąże problem. – Vijayaraghavan