Jeśli wcześniej o tym mówiono, to przykro mi, miałem trudności z przeszukiwaniem tego.
Obliczam stawkę amortyzacji. Jedna część naszych obliczeń to 1 / życie w miesiącach. Moja tabela przechowuje te dane w decimal
pole. próbowałem test = 1 / estimatedLife;
ale wynik obliczenia test
(który jest zdefiniowany jako decimal
) wynosi 0.
Powiedz, że szacunkowe życie wynosi 36 miesięcy. Zatem 1/36 powinna wynosić 0,02777778.
Jakieś myśli o tym, co robię źle?
BTW, zmieniłem test
do podwójnego i miał taki sam wynik.
Odpowiedzi:
4 dla odpowiedzi № 1próbować:
test = 1.0M / estimatedLife;
5 dla odpowiedzi nr 2
Inną wbudowaną alternatywą jest Dziesiętny.Divide:
test = Decimal.Divide(1, estimatedLife);
Bardziej do pisania, ale całkiem jednoznacznie powiedziałbym.
2 dla odpowiedzi nr 3
Twój kod dzieli dwie liczby całkowite, a następnie przypisuje wynik (który jest także liczbą całkowitą) do a decimal
zmienna.
Musisz się przełączyć decimal
dzielenie przez wykonanie co najmniej jednego z argumentów a decimal
, lubię to: 1.0M / estimatedLife
.
2 dla odpowiedzi № 4
estimLife to int, nie jest to. Spróbuj tego:
decimal test = 1 / (decimal) estimatedLife;
lub skorzystaj z sugestii SwDevMan81:
test = 1.0M / estimatedLife;
Problem polega na tym, że podział liczb całkowitych wyrzuca wszystko po kropce dziesiętnej. Jednym z argumentów musi być dziesiętny, aby uzyskać pożądany wynik.
The link do dokumentacji który zamieścił w komentarzu mówi:
Jeśli chcesz, aby numeryczny prawdziwy literał był traktowany jako dziesiętny, użyj przyrostka m lub M
więc 1,0M oznacza "literał dziesiętny typu o wartości 1,0"
2 dla odpowiedzi № 5
aby dodać, jeśli potrzebujesz konkretnej precyzji (zauważyłem, że twój wynik został ustawiony na 8 miejsc dziesiętnych), możesz go użyć
decimal test = Math.Round(1M / estimatedLife,8);