/ / Wartość dziesiętna jest zerowa, gdy powinna wynosić 0.0x - c #, dziesiętna, dzielona

Wartość dziesiętna to zero, gdy powinno być 0.0x - c #, dziesiętne, dzielenie

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 № 1

pró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);