Sobes.tech
Middle+

Ako sa dá vyhnúť problému s plávajúcou desatinnou čiarkou bez použitia NUMERIC? Aký je alternatívny prístup s typom INT?

sobes.tech AI

Odpoveď od AI

Problém s plávajúcou desatinnou čiarkou vzniká kvôli obmedzenej presnosti pri reprezentácii čísel s desatinnou časťou v typoch float alebo double. Aby sa predišlo chybám zaokrúhľovania bez použitia typu NUMERIC (ktorý zabezpečuje presnú aritmetiku s pevnou desatinnou čiarkou), často sa používa prístup s použitím celých typov (INT).

Myšlienka spočíva v tom, že hodnoty sa ukladajú v minimálnych jednotkách, napríklad namiesto uloženia 12,34, sa uloží 1234 (násobením 100). Takto sa všetky operácie vykonávajú s celými číslami, čo vylučuje chyby zaokrúhľovania, ktoré sú charakteristické pre float.

Príklad v Go:

package main
import "fmt"

func main() {
    // Ukladáme peniaze v halieroch (celé číslo)
    var priceCents int = 1234 // 12,34 rublov

    // Pridáme 0,66 rublov (66 halierov)
    priceCents += 66

    fmt.Printf("Cena: %d.%02d rublov\n", priceCents/100, priceCents%100)
}

Tento prístup sa široko používa v finančných aplikáciách, kde je dôležitá presnosť a absencia chýb zaokrúhľovania.