Witam
mam zdefiniowany znak %
i teraz mam problem z case
case Type.procent:
cal %= double.Parse(Block.Text);
break;
i nie działa mi to poprawnie.
Jak to można naprawić
Witam
mam zdefiniowany znak %
i teraz mam problem z case
case Type.procent:
cal %= double.Parse(Block.Text);
break;
i nie działa mi to poprawnie.
Jak to można naprawić
cal %=
co to jest?
private double cal
Member of kalkulator.MainPage
Rozumiem. A co dokładnie się dzieje … Nie wykonuje się instrukcja z case? Wartość przypisana do cal jest niepoprawna?
no więc ciężko mi powiedzieć co jest nie tak. kombinuje jeszcze zamiast double użyć sign ale to już w ogóle nie gra.
albo robi mi 0 albo jakieś dziwne wyniki z kosmosu
A jakieś przykładowe liczby i jaki dostajesz dla nich wynik?
I jeszcze jakbyś mógł podać jak wygląda u Ciebie deklaracja tego operatora % (może tu masz błąd).
private void procent_klik(object sender, RoutedEventArgs e)
{
Operator(Type.procent);
}
próbowałem już:
private void procent_klik(object sender, RoutedEventArgs e)
{
Operator(sign);
Block.Text = cal.ToString();
sign = Type.procent;
}
public partial class MainPage : UserControl
{
enum Type
{
None = 0,
rownosc,
dodawanie,
odejmowanie,
mnozenie,
dzielenie,
procent
}
private double cal = 0.0d;
private Type sign = Type.None;
private void Operator(Type type)
{
if (sign != Type.rownosc)
{
if (sign == Type.None)
cal = double.Parse(Block.Text);
else
{
switch (type)
{
case Type.dodawanie:
cal += double.Parse(Block.Text);
break;
case Type.odejmowanie:
cal -= double.Parse(Block.Text);
break;
case Type.mnozenie:
cal *= double.Parse(Block.Text);
break;
case Type.dzielenie:
cal /= double.Parse(Block.Text);
break;
case Type.procent:
cal %= double.Parse(Block.Text);
break;
}
}
}
Block.Text = string.Empty;
sign = type;
}
100*10%= nic
i tak za każdym razem
% oznacza resztę z dzielenia dwóch liczb. Czyli jak robisz 100 % 10 to wynik dostajesz 0, bo reszta z dzielenia 100 przez 10 jest równa 0.
Da się zrobić, żeby % oznaczał taki matematyczny procent, ale wówczas musiałbyś napisać własną implementację dla tego operatora.
EDIT: To nie będzie miało wpływu na działanie programu, ale mógłbyś zmienić nazwę tego enuma na inną niż Type. Bo ta klasa jest już zdefiniowana w przestrzeni nazw System.
tylko że 78*40% też mi nic nie pokazuje
No powinno pokazać 38. Ale jesteś pewien, że wykonywane jest działanie 78 % 40? Mam wrażenie, że tak się nie dzieje. Puść ten kod przez debugger.
IMO wersja z użyciem tej zmiennej sign jest troszkę bez sensu (chyba, że ja czegoś tu nie łapię). Lepiej użyj tej wersji, gdzie jest tylko
Operator(Type.procent);
w procedurze obsługi zdarzenia. Ale w takiej sytuacji musisz zadbać o to, aby przypisać wartość do zmiennej calc (przed wykonaniem operacji %), bo nie widzę, żebyś gdziekolwiek to robił. Wartość calc też powinna być wczytywana z jakiegoś textbox-a.
tylko że dodawanie, dzielenie, mnożenie, odejmowanie działa bez problemu.
właśnie też myślę że to jest ok
Operator(Type.procent);
ale już nie wiedziałem czego próbować.
zero uwag, zero problemów wg debuggera
A to ciekawe, że to działa dla innych operacji. Ponawiam pytanie. Gdzie przypisujesz wartość początkową calc (gdy nie jest użyta ta zmienna sign)?
sign = type;
tu nadaje ją parametrowi
* Miałem oczywiście na myśli zmienną cal.
private double cal = 0.0d;
tu zaczynam
W porządku, a gdzie przypisujesz wspomniane wyżej 78 i 100
w pole Block
private void Block_TextChanged(object sender, TextChangedEventArgs e)
No to musisz to zmienić. Wartość cal musi być wczytywana z innego pola. Pole Blok posłuży wówczas do wczytania wartości 10 i 40 (i aktualnie do tego służy), a to nowe pole do wczytania wartości 100 i 78.
Nie wiem jakim cudem działa Ci dodawanie i pozostałe operacje. Przecież to nie ma prawa działać
no a co za różnica czy on wczyta 10 i 40 czy 100 i 78? kurczę coś skopałem i teraz mi nie działa . , czyli liczba po przecinku;/ robię 1.33 i zamiast znaku * zawiesza się i nie reaguje, tak jak by case zrobił break i miał to gdzieś.
Mógłbyś pokazać jak teraz wygląda Twój kod wraz z kodem odpowiedzialnym za obliczanie tego Twojego procenta?