Widziałem ten finanse kod obliczeniowy na komputerze mojego przyjaciela:0.0/0.0 w C# nie rzuci "Próbowano podzielić przez zero."?
double Total = ...
double Paid = ...
double Wating_For_Details = ...
double Decuctibles = ...
double Rejected = ...
dobrze, moment Widziałem to, powiedziałem mu, że double
jest reprezentowany na base 2
i może NIE stanowią obliczenia finansowego. zamiast tego użyj decimal
.
świetnie.
Ale w chwili zmienić to podwojenie Ive napotkał:
Attempted to divide by zero.
co?
Najwyraźniej - używając double
, gdy dzieląc z 0.0
robi NIE rzuca wyjątek:
Ale zwraca NAN
.
Podczas mojego kodu (przy użyciu decimal
) wykonuje rzut wyjątku (gdy Total
jest zero
)
A więc pytam:
Sprawdziłem 0.0==0
i zwraca true. więc dlaczego nie otrzymuję wyjątku, ale NAN
? Wiem, jak to powinno być, ale gdzie jest powszechny powód nie rzucania wyjątku przy dzieleniu podwójnego przez zero?
"Sprawdziłem" 0.0 == 0 "" - co, według Ciebie, sprawdzało? Operandy po obu stronach są nierównych typów, ale niejawna konwersja 'int' na' double' istnieje - więc to co faktycznie sprawdziłeś, to że '0.0 == 0.0'. –
Również twoje pytanie jest postawione tak, jakby rzucanie wyjątku było * oczywiście * poprawną rzeczą w tej sytuacji - jest wiele kompromisów w świecie komputerów i często nie ma jednego "poprawnego" sposobu robienia rzeczy. –
Podobny do http://stackoverflow.com/questions/4609698/inconsistency-in-divide-by-zero-behavior-between-different-value- typeses (nawet jeśli nie jest dokładnie duplikatem) – bigge