🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: alt.pl.comp.lang.csharp
6 messages
6 total messages Started by Kuba Mon, 01 Aug 2011 19:14
zaokrąglenie
#22236
Author: Kuba
Date: Mon, 01 Aug 2011 19:14
20 lines
1545 bytes
Witam,

przepisuję sobie dane z z pliku CSV (przy pomocy split, separator ","), 
zamieniam w polu kwota "." na "," i wrzucam do dataGridView
dataGridView1.Rows[ licznik].Cells[ licznik_kolumn + 1].Value = 
Double.Parse( pole.Replace( '.',  ','));

później sumuję w pętli wartości dla kolumny kwota Double.Parse( 
dataGridView1.Rows[i].Cells["kwota"].Value.ToString())

i wychodzi różnica groszowa np. 54628423,9200019 a jak przesortuję wg innej 
kolumny to 54628423,9200006, itd.
(Excel robi dokładnie to samo !!!)

o co tu chodzi?  (wszystkie poszczególne liczby mają dwa istotne miejsca po 
przecinku - sprawdziłem w Excelu 9 miejsc).

pozycji jest ok 42 000.

POMOCY - pozdrawiam 
Re: zaokrąglenie
#22237
Author: Maciej Pilichowski
Date: Tue, 02 Aug 2011 04:28
33 lines
2032 bytes
On Mon, 1 Aug 2011 21:14:20 +0200, "Kuba" <kuba320@wp.pl> wrote:

>zamieniam w polu kwota "." na "," i 

To zle robisz. Konwertuj na znak wg ustawien systemowych.

>wrzucam do dataGridView
>dataGridView1.Rows[ licznik].Cells[ licznik_kolumn + 1].Value = 
>Double.Parse( pole.Replace( '.',  ','));

To robisz nie najlepiej. Wrzuc to sobie do tablicy double, a grida
zbinduj z tymi danymi. 

>póĽniej sumuję w pętli warto¶ci dla kolumny kwota Double.Parse( 
>dataGridView1.Rows[i].Cells["kwota"].Value.ToString())
>
>i wychodzi różnica groszowa np. 54628423,9200019 

Roznica groszowa na czym? Ze matematycznie jak posumujesz wartosci,
ktore widzisz, to dostajesz jedno, a suma komputerowa daje drugie?
Uzyj nie double, a decimal.

>o co tu chodzi?  

Reprezentacje liczb w komputerze. Cos co Ty widzisz jako 4.20 jest
tekstem, zeby przeksztalcic to na liczbe czesto konieczne jest
zaokraglenie do np. 4.1998 -- komputer bowiem nie pracuje w systemie
dziesietnym i dla niego 10 to nie jest "rowna" liczba, a 16.

milego dnia, hej
-- 
Moja wyprzedaz wszystkiego: ksiazki, plyty, filmy.
http://www.garaz.pol.pl/
Re: zaokrąglenie
#22238
Author: Piotr Stęclik
Date: Wed, 03 Aug 2011 05:38
12 lines
1707 bytes
Jak powiedział Morfeusz "Witaj w prawdziwym świecie".
Liczby zmiennoprzecinkowe (double) są przechowywane w sposób
niedokładny
i stąd operacje na nich mają inne cechy niż poznana na lekcjach
matematyki
arytmetyka.
Problem, z którym masz do czynienia to łączność dodawania: prawo to
nie działa
(czytaj może nie działać) na doublach. Krótko mówiąc czasami
 (a+b)+c != a+(b+c)
Wikipedia rozwieje resztę Twoich wątpliwości
http://pl.wikipedia.org/wiki/Liczba_zmiennoprzecinkowa
Re: zaokrąglenie
#22239
Author: yamma
Date: Wed, 03 Aug 2011 07:01
10 lines
1293 bytes
Kuba wrote:

> później sumuję w pętli wartości dla kolumny kwota Double.Parse(
> dataGridView1.Rows[i].Cells["kwota"].Value.ToString())

Odpal sobie Worda, ustaw czcionkę na, powiedzmy, jakieś 40 pkt i wklep 
następujący tekst: "NIGDY NIE BĘDĘ UŻYWAŁ TYPÓW ZMIENNOPRZECINKOWYCH DO 
PRZECHOWYWANIA DANYCH FINANSOWYCH". Potem to wydrukuj i powieś sobie na 
ścianie.
yamma 
Re: zaokrąglenie
#22240
Author: Paweł Kierski
Date: Wed, 03 Aug 2011 09:06
27 lines
2014 bytes
W dniu 2011-08-03 09:01, yamma pisze:
> Kuba wrote:
>
>> później sumuję w pętli wartości dla kolumny kwota Double.Parse(
>> dataGridView1.Rows[i].Cells["kwota"].Value.ToString())
>
> Odpal sobie Worda, ustaw czcionkę na, powiedzmy, jakieś 40 pkt i wklep
> następujący tekst: "NIGDY NIE BĘDĘ UŻYWAŁ TYPÓW ZMIENNOPRZECINKOWYCH DO
> PRZECHOWYWANIA DANYCH FINANSOWYCH". Potem to wydrukuj i powieś sobie na
> ścianie.

Teraz wyrzuć tę kartkę i zrób drugą:
"NIGDY NIE BĘDĘ UŻYWAŁ W OBLICZENIACH FINANSOWYCH TYPÓW
ZMIENNOPRZECINKOWYCH O PODSTAWIE INNEJ, NIŻ UŻYWANA W TYCH FINANSACH".

Zmiennoprzecinkowe mogą być OK, byle miały podstawę taką, jak
"w papierach" (zwykle - 10) i miały kontrolę nad zaokrągleniami.
W końcu kwoty też się kiedyś zaokrągla - w określony sposób. 2123,47zł
na 6.43% w stosunku rocznym z dzienną kapitalizacją szybko będzie miało
duuużo cyfr znaczących.

Ważne, żeby reprezentacja i operacje były spójna z obliczeniami
wykonywanymi "na kartce".

-- 
     Paweł Kierski
     news@pkierski.net
Re: zaokrąglenie
#22241
Author: Kuba
Date: Wed, 03 Aug 2011 18:56
5 lines
1120 bytes
Kończąc wątek, bardzo dziękuję za mniej lub bardziej zgryźliwe, jednak dla 
mnie bardzo pouczające i ważne, uwagi oraz wskazówki.
Pamiętacie? Początki są ciężkie...
pozdrawiam
Kuba 
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads