eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingPorównywanie liczb, double float › Re: Porównywanie liczb, double float
  • X-Received: by 2002:aed:3363:: with SMTP id u90mr4888531qtd.7.1562909275672; Thu, 11
    Jul 2019 22:27:55 -0700 (PDT)
    X-Received: by 2002:aed:3363:: with SMTP id u90mr4888531qtd.7.1562909275672; Thu, 11
    Jul 2019 22:27:55 -0700 (PDT)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erj
    e.net!4.us.feeder.erje.net!feeder.erje.net!weretis.net!feeder6.news.weretis.net
    !feeder.usenetexpress.com!feeder-in1.iad1.usenetexpress.com!border1.nntp.dca1.g
    iganews.com!nntp.giganews.com!b26no1118578qtq.0!news-out.google.com!g23ni54qtq.
    1!nntp.google.com!b26no1118567qtq.0!postnews.google.com!glegroupsg2000goo.googl
    egroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Thu, 11 Jul 2019 22:27:55 -0700 (PDT)
    In-Reply-To: <qe65vo$18po$1@gioia.aioe.org>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=93.174.24.8;
    posting-account=FE4hoAoAAADKg8EtnA4bEyQiJf7iqAgV
    NNTP-Posting-Host: 93.174.24.8
    References: <qdqqh6$n2f$1@dont-email.me> <5d00f035$0$15194$426a74cc@news.free.fr>
    <5d011217$0$17348$65785112@news.neostrada.pl>
    <qe65vo$18po$1@gioia.aioe.org>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <5...@g...com>
    Subject: Re: Porównywanie liczb, double float
    From: DMR <m...@g...com>
    Injection-Date: Fri, 12 Jul 2019 05:27:55 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    Lines: 46
    Xref: news-archive.icm.edu.pl pl.comp.programming:213676
    [ ukryj nagłówki ]

    > Zamieszcze tu po raz 473 w ciagu 20 lat podstawową formułkę
    > (Ba! KANON!)


    To ja poprosiłbym o jakiś patent na odporne na zaokrąglenia rozdzielenie części
    całkowitej i ułamkowej w zmiennej typu double.



    > ponaglenia o pilną zapłatę 0.00PLN


    No właśnie.
    Przykładowo, muszę zrobić: 12345.6789 zł -> 12345 zł 68 gr

    Wiadomo:

    double suma, f;
    int zlote, grosze;

    ...

    suma += 0.005;

    zlote = (int)suma;
    f = suma - zlote;
    grosze = (int)(f * 100.0);

    Problemy mogą pojawić w przypadku wartości praktycznie równych wartościom całkowitym.
    Gdyby na skutek jakichś zaokrągleń wartość f okazała się ujemna, to nie ma problemu -
    (int) i tak "dociągnie" ją do zera.

    Gorzej, gdyby np. suma = 1234.9999999999999997, za to teoretycznie f =
    0.9999999999999997 za sprawą zabłąkanego bitu na końcu przeskoczyła na f =
    1.0000000000000001.
    Wtedy wyjdzie 1234 zł 100 gr...

    Chyba, że nie potrzebnie się martwię.
    Testowałem to wielokrotnie dla miliardów złośliwie wygenerowanych danych "z
    pogranicza" - ani razu się nie wywaliła.

    No, ale... :-)

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

  • 13.07.19 09:21 AK
  • 14.07.19 10:16 DMR
  • 16.07.19 00:05 AK
  • 22.07.19 09:17 fir
  • 22.07.19 09:37 fir
  • 22.07.19 09:47 fir
  • 22.07.19 10:16 fir
  • 22.07.19 17:03 fir
  • 22.07.19 17:24 fir
  • 22.07.19 21:56 fir
  • 24.07.19 19:19 DMR
  • 24.07.19 21:13 AK
  • 24.07.19 22:39 fir
  • 26.07.19 20:35 AK
  • 12.01.20 19:17 DMR

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: