[ dava @ 14.11.2013. 13:49 ] @

Code:


Public artUkupno As Single

Private Sub Form_Load()

Dim potroseno As Integer

artUkupno = 0

artUkupno = artUkupno + 3.39
artUkupno = artUkupno + 1.29

artUkupno = artUkupno + 1.49
artUkupno = artUkupno + 0.99
artUkupno = artUkupno + 1.99

artUkupno = artUkupno + 1.4
artUkupno = artUkupno + 3.15
artUkupno = artUkupno + 0.3

'artUkupno = Format(artUkupno, "#,###0.00")

potroseno = Int(artUkupno)

Debug.Print potroseno

End Sub



Rješenje problema je u formatiranju, ali me zanim kako to VB6 interno pamti brojeve, očigledno ne onako kako ih prikazuje u Add Watch ili Output prozoru.
[ shpiki @ 14.11.2013. 18:18 ] @
Sta ti nije jasno?
Doduse malo je bezveze program (konstantno sabira artUkupno staro na koje dodaje odredjene vrednosti).
Sta konkretno treba da radi ovaj program?
[ dava @ 14.11.2013. 19:37 ] @
Kako bezveze program, ovo ti je moj najbolji program!!!

Istina nisam objasnio gdje je problem, mislio sam da će neko isprobati ovaj kod. Problem je sto nakon sabiranja, vrijednost u Single varijabli je 14 ili bar tako VB ispiše, ali u stvari on negdje interno drzi broj koji je priblizno 14.

Kad se uradi konvertovanje u int, ova linija:

Code:
potroseno = Int(artUkupno)


vrijednost u varijabli potroseno je 13.
Sa varijablom tipa Double nema tih problema.
[ Burgos @ 14.11.2013. 19:39 ] @
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
[ shpiki @ 15.11.2013. 01:03 ] @
Citat:
dava: Kako bezveze program, ovo ti je moj najbolji program!!!

Izvini, nisam hteo da te uvredim! Jednostavno, nisam video svrhu/poentu ovog programa...

Procitaj ovo sto ti je Burgos postavio (mada je za moj ukus preopsirno), a mozes da konsultujes Google za "pokretni zarez" ako ti je nas laksi za razumevanje...
U svakom slucaju, poenta je u Sigle data type i floating-point...
[ dava @ 15.11.2013. 12:31 ] @
Citat:
shpiki: Izvini, nisam hteo da te uvredim! Jednostavno, nisam video svrhu/poentu ovog programa...


Ma nisi me uvredio nego zar ne vidiš da je ovo primjer problematičnog koda, a ne neki funkcionalni program.

Da odgovorim sam sebi:

3.39 11.01100011110101110000101000111101 11.01100 3.375
1.29 1.01001010001111010111000010100011 1.010010 1.28125
1.49 1.01111101011100001010001111010111 1.011111 1.484375
0.99 0.11111101011100001010001111010111 0.111111 0.984375
1.99 1.11111101011100001010001111010111 1.111111 1.984375
1.4 1.01100110011001100110011001100110 1.011001 1.390625
3.15 11.00100110011001100110011001100110 11.00100 3.125
0.3 0.01001100110011001100110011001100 0.010011 0.296875

Druga kolona su decimalni brojevi predstavljeni u binarnom obliku (tako ih računar tretira)
Treća kolona su ti isti binarni brojevi ali zaokruženi na 7 cifara (tako ih zaokružuje tip Single)
Četvrta kolona su opet decimalni brojevi ali oni dobiveni iz zaokruženih binarnih.
Suma 4. Kolone je 13.921875 a čiji je integer 13.

[ djoka_l @ 15.11.2013. 12:58 ] @
Grešiš, ali silno grešiš.

Single (float) tip podataka ima preciznost od 6-9 DECIMALNIH cifara, a ne BINARNIH. Za predstavljanje float tipa pogledaj:
http://en.wikipedia.org/wiki/S...recision_floating-point_format

Mantisa float broja sadrži 23 binarne cifre (ili bolje rečeno 24 jer se prva jedinica sa leve strane ne piše), tako da ako želiš da vidiš zašto nije ispalo ono što si mislio da će ispasti, uzmi od svakog od tih brojeva 24 bita pa onda napravi računicu...