Błąd niespójności dostępności - jak to naprawić?

Błąd niespójności dostępności - jak to naprawić?
Tumeg
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 687
0

Błąd tak jak w temacie, podaje tutaj swój kod:

Kopiuj
namespace cashcounter 
{

enum type {BRUTTO, NETTO};
	
	public class counter
	{
		public double kwota;
		public double VAT;
		public type typ;
		
		public counter(double kwota, double VAT, type typ)
		{
			this.kwota = kwota;
			this.VAT = VAT;
			this.typ = typ;
		}
   }
}

Co zrobić żeby ruszyło ?

SP
  • Rejestracja: dni
  • Ostatnio: dni
1

Dać:

Kopiuj
public enum type {BRUTTO, NETTO};
DibbyDum
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Polska, Kraków
0
Kopiuj
enum type {BRUTTO, NETTO};

na:

Kopiuj
public enum type { BRUTTO, NETTO };
Tumeg
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 687
0

Dzięki, a ja wcześniej kombinowałem z prawami dostępności wewnątrz klasy :|

fourfour
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 627
8

Oj, double dla operacji na cenach/walutach nigdy mi się nie podobało. Szczególnie przy przelicznikach ilości i innych kursach walut :)

SP
  • Rejestracja: dni
  • Ostatnio: dni
0
fourfour napisał(a):

Oj, double dla operacji na cenach/walutach nigdy mi się nie podobało. Szczególnie przy przelicznikach ilości i innych kursach walut :)

Bo double ma mniejszą precyzję, do przechowywania cen i operacji na nich powinno używać się typu Decimal :)

Tumeg
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 687
0

Ok, zmieniłem na Decimal. Ale czy tutaj popełniłem tak duży błąd ? Przecież obydwa typy zajmują 8 bajtów.

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6965
5

Światowa gospodarka się na tym nie załamie, ale jeśli chodzi o pieniądze, to musimy używać typów dokładnych, a decimal właśnie taki jest. Jeszcze lepiej byłoby napisać klasę przechowującą walutę w intach (dwa pola: złotówki, grosze, albo jedno duże - jakiś big int - pole na grosze i odpowiednio oprogramowane wypisywanie zawartości, złotówki to wynik dzielenia przez 100, grosze to reszta z dzielenia przez 100). Do tej klasy napisać odpowiednie operatory (dodawanie, odejmowanie itd.).

Poza tym, nie w samych bajtach tkwi różnica, poczytaj http://msdn.microsoft.com/en-us/library/364x0z75.aspx

vpiotr
  • Rejestracja: dni
  • Ostatnio: dni
2

Dlaczego double nie jest dobry dla obliczeń walutowych:

Kopiuj
double x = 0.1 + 0.1 + 0.1 - 0.3;
System.out.println("Dostalem = "+x);
System.out.println("Mialo byc = "+0.0);

// Dostalem = 5.551115123125783E-17
// Mialo byc = 0.0

Edit: No i się wkopałem - myślałem że to Java

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.