Mesaje recente

Members
Stats
  • Total Posts: 17,786
  • Total Topics: 1,234
  • Online today: 320
  • Online ever: 320
  • (Today at 19:51)
Users Online
Users: 0
Guests: 109
Total: 109

WTF: implementare de round

Started by kman, 02 November 2006, 16:38

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

kman

Pentru ca nu avem (inca ?) sectiune de WTF, postez aici ultima mea creatie pe ziua de azi.

... deci, datele problemei, limbaj de programare proprietar (50% asemanator cu TCL), suport inexistent pentru numere rationare/reale/negative, functii matematice inexistente.
Se cere, pentru un sistem care nu suporta decat fix 2 zecimale dupa virgula sa se implemnteze o functie de round care sa impace si capra si varza.

Demonstratie ....  :fk: .... si dupa 9 luni (minute de gandire) aparu' monstru:
Code (php) Select
proc round { pm_val pm_prec } {
        local lv_point_pos [strfindsub $pm_val "."]
        if { [null $lv_point_pos] } {
                # if number is integer return number
                return $pm_val
        }
        local lv_supra [strsub $pm_val 0 $lv_point_pos]
        local lv_subu [strsub $pm_val [expr $lv_point_pos + 1] $pm_prec]
        local lv_nextn [strsub $pm_val [expr $lv_point_pos + 1 + $pm_prec] 1]
        if { [null $lv_nextn] } {
                # if no values after rounding position return initial number
                return $pm_val
        }
        if { $lv_nextn >= 5 } {
                # do we need rounding ?
                local lv_subu [expr $lv_subu + 1]
                if { [strlen $lv_subu] > $pm_prec } {
                        local lv_subu [strsub $lv_subu 1 $pm_prec]
                        local lv_supra [expr $lv_supra + 1]
                }
        }
        # reconstruct the number
        local lv_nr [strcat $lv_supra "." $lv_subu]
        return $lv_nr
}


Q.E.D.  :fum: