V souvislosti s nalezenou chybou v knihovně Smart Scale Library ve verzi 1.0.0 (CRC 3A508F2B), byla připravena aktualizace knihovny – verze 1.0.1 (CRC FE00C6A8).

Popis nalezené chyby: při zadání jednotkové ceny 36,90 Kč/kg se na displeji váhy zobrazila jednotková cena 36,89 Kč/kg, tedy rozdíl v hodnotě řádu haléře. Chyba byla vedena jako issue POSB-9750.

Důvod, proč k chybě docházelo: Dle protokolu se do váhy odesílá jednotková cena vynásobená konstantou 100. Po vynásobení konstantou 100 se výsledek v jazyce C++ přetypoval na celé číslo a z důvodu implementace datového typu double (dle standardu IEEE 754) v prostředí Windows32 docházelo k tomu, že výsledná hodnota byla po převodu z dvojkové do desítkové soustavy vyčíslena jako 3689,9999999999999999 s nekonečným desetinným rozvojem (tj. 36,90 * 100 = 3689,9999999999999 a po oříznutí desetinné části tedy jako 3689). V případě jiných hodnot k nekonečnému desetinnému rozvoji nedochází, např. 150 * 100 = 15000, tj. nejsou obsažena žádná desetinná místa.

Způsob opravy: Do jednotkové ceny po vynásobení konstantou 100 se nyní přičítá konstanta 0,5 a až poté se číslo přetypuje na celočíselnou hodnotu. Toto zajistí správnou funkčnost, protože přetypování na celé číslo ořízne celý desetinný rozvoj (v uvedeném případě tedy 3689,9999999999999 + 0,5 = 3690,4999999999999, což je po oříznutí na celou část 3690). Toto řešení vyhovuje i všem ostatním případům, protože přičtení hodnoty 0,5 neovlivňuje hodnotu před desetinnou čárkou (např. 150 * 100 + 0,5 = 15000,5 a po oříznutí desetinné části je to 15000).

Toto byla jediná provedená úprava v nové verzi knihovny 1.0.1, níže je uveden rozdíl v jazyce C++ mezi verzemi knihoven (červeně původní verze 1.0.0, zeleně nová verze 1.0.1)

Revision: 8
Last modified: 12 November 2020

Potřebujete pomoci ?
Zákaznická podpora SmartPOS

Bylo to užitečné ?

Ano Ne
Označili jste toto téma za neužitečné...
Mohli byste nám, prosím, říct, proč ? Děkujeme !
Děkujeme za vaši zpětnou vazbu.