Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
redenergy
HV veteran

liitunud: 22.03.2004
|
06.09.2010 18:28:16
sql, INT ja komad |
|
|
Tervist,
kuna sql tabelis INT ei saa salvestada komasid siis tuleks raha sisestada varchar?!
Aga kuidas kontrollida, et input oleks sisestatud ainult numbrid ja 1 koma/punkt?
Ja kui peaks arvutama SUM raha kokku kas siis koma ja punkt teevad sama välja?
Või peaks sentide puhul lubama ainult punkti kasutada?
|
|
Kommentaarid: 30 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
9 |
|
tagasi üles |
|
 |
neros
HV Guru

liitunud: 26.11.2003
|
06.09.2010 18:34:44
|
|
|
selleks on väljatüüp "DECIMAL". Seal on võimalik määrata maksimumpikkus enne- ja pärast koma.
_________________ GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt. |
|
Kommentaarid: 48 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
40 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
06.09.2010 18:43:50
|
|
|
Sa peaks ennem salvestamist midagi sellist vast tegema.
$nr="2,45";
$nr=str_replace(",",".",$nr); // asendab komad punktiga
if(is_numeric($nr)){echo "On number";} // salvestad
else
{echo "Pole number";} // annad veateate |
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
redenergy
HV veteran

liitunud: 22.03.2004
|
06.09.2010 19:34:59
|
|
|
Suured tänud, sain kõik töötama nagu vaja.
Aga üks asi ei meeldi, nimelt Decimal 8,2 jätab kaks 0 taha isegi siis kui sente pole sisestatud.
näiteks 5.- teeb 5.00.-
Kas selle vastu ka rohtu on?
|
|
Kommentaarid: 30 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
9 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
06.09.2010 21:05:03
|
|
|
redenergy, rohtu vast ei ole, kui soovid eemaldada, siis pead selle ise ära tundma.
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
redenergy
HV veteran

liitunud: 22.03.2004
|
06.09.2010 22:09:50
|
|
|
Kui keegi peaks sarnase asja vastu huvi tundma, siis toon endapoolse lahenduse mis leidsin.
See kaotab lõpust nullid. Samas häirima jäi see, et kui sisestada 3.50 siis ei tahaks, et 0 kaob.
Lahendus siis varchar ja enne andmebaasi lisamist kontroll, et oleks number. iisi
Tänan
|
|
Kommentaarid: 30 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
9 |
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
06.09.2010 22:19:07
|
|
|
Numbrite hoidmine baasis VARCHAR välja peal on iseenesest saatanast väga mitmetel põhjustel - alustades sellest, et sa ei garanteeri sellisel juhul 100% kindlusega, et sealt baasist alati number tuleb, kui sa seda ootad, kuni selleni, et sa ei saa näiteks teha päringuid stiilis "WHERE hind > 5".
Numbrite ilusaks vormistamiseks veebis näitamisel sobiksid ikkagi minu viidatud php funktsioon või mõni neist, millele viidatakse antud funktsiooni juurest "see also" alajaotuses.
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
06.09.2010 22:21:20
|
|
|
AB'st tuleb stringina tagasi väärtus? Saad ju teha tuima võrdluse
php:
|
if(substr($value, -2) == '00') { $value = substr($value, 0, -3); }
|
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
redenergy
HV veteran

liitunud: 22.03.2004
|
06.09.2010 23:09:41
|
|
|
Fukiku, olen jälle targem.
mikk36, suured tänud.
|
|
Kommentaarid: 30 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
9 |
|
tagasi üles |
|
 |
mirko28
Aeg maha 1p

liitunud: 31.12.2003
|
07.09.2010 23:49:29
|
|
|
Metoodiliselt on isegi parem kui proovid mitut lahendusviisi, sh ka lahendust, kus salvestad arve tekstina andmebaasi;)
|
|
Kommentaarid: 5 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
sosssepp
HV veteran

liitunud: 12.05.2003
|
08.09.2010 00:04:34
|
|
|
Arve tekstina salvestades kulutad kettapinda juba palju rohkem, tõenäoliselt ka muid ressursse.
|
|
Kommentaarid: 87 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
75 |
|
tagasi üles |
|
 |
blinx
HV vaatleja
liitunud: 28.11.2009
|
08.09.2010 13:11:13
|
|
|
ma olen näinud et peale isnumeric kontrollitakse ka, et ei oleks tegu hex väärtusega
see on muidugi siis kui sa tahad, et su funktsioonid oleks hästi defineeritud ja suletud iga võimaliku argumentide kombinatsioonoi suhtes
_________________ 'Just buy everything then you're safe' |
|
tagasi üles |
|
 |
tola555
HV vaatleja
liitunud: 29.06.2005
|
20.09.2010 19:26:19
|
|
|
mis andmebaasihaldamise süsteemiga tegu on? Osadel on raha jaoks spetsiaalsed tüübid nagu http://www.postgresql.org/docs/8.3/static/datatype-money.html , ka numeric on mõnes kohas olemas.
Vaata, et float ümardama ei hakkaks. Mina väldiks float-i ja double-it. Katseks võid sisestada 0.00000...001 või 0.99...99 ja pärast proovi sql-iga pärida, kas saad tagasi selle sama arvu.
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
 |
redenergy
HV veteran

liitunud: 22.03.2004
|
20.09.2010 20:02:16
|
|
|
Kas money_format kasutades on võimalik EEK arvu taha tuua?
Või kas õigem ongi nii, et EEK 2.50 mitte 2.50 EEK?
|
|
Kommentaarid: 30 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
9 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
20.09.2010 21:20:15
|
|
|
Pigem on abstraktne summa, ühiku võid ise eraldi tulpa panna.
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
serk
HV kasutaja
liitunud: 24.05.2003
|
24.09.2010 23:17:10
|
|
|
redenergy kirjutas: |
Kas money_format kasutades on võimalik EEK arvu taha tuua?
Või kas õigem ongi nii, et EEK 2.50 mitte 2.50 EEK? |
Mitme valuutalises keskkonnas peab summa juures alati olema valuuta, selles suhtes on sul õigus, aga kindlasti eraldi veerus. Summa veeru loomisel mõtle läbi mida sa sinna ikkagi salvestad, suurus ja komakohad. Korralik ja läbimõeldud andmemudel toob põhimõttelised vead koodi arendusel ruttu välja.
|
|
Kommentaarid: 8 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
2korda2
HV kasutaja
liitunud: 19.07.2003
|
25.09.2010 10:16:24
KISS |
|
|
Jäke palun meelde järgmised elementaarsed põhimõtted:
1. Rahaline summa/hind on alati number(x,y). Enamasti y=2. Erandid: ühikuhind (1 tiku hind), eelarve (üldjuhul kõik ümardatud täisarvuni või isegi tuhandete/miljoniteni, näiteks: "Käive: 1 700 tuhat krooni") jms
2. Hinnad ja summad joondatakse tulpades ALATI paremale.
3. Kui väärtuses, mida kuvatakse võivad olla ka komakohad, siis tuleb ALATI need kõik kuvada (vaata p1 formaati), sõltumata sellest kas seal on 00 või midagi muud. See on asi, millele ma olen siinsamas HV-s korduvalt tähelepanu juhtinud aga millegipärast pole ikka kohale jõudnud. Põhjus on elementaarne (leia loetelust suurim väärtus):
17.10
121
1100
130.20
4. Mitme valuuta puhul on universaalseim lahendus lisada eraldi valuuta veerg. Summasid seejuures oleks soovitav hoida mitmes veerus: summa näidatud valuutas, summa põhivaluutas. On loll idee hakata valuutakursse arvestama hetkel, kui raamatupidur vms teeb oma kuuaruannet. Eriti "kaval" arendaja liidab muidugi külma kõhuga kokku USD ja EUR summad.
5. Kui tegelete arvetega, siis jälgige, et ridade summa=päise summa. Ka võõrvaluutas. Märksõna: ümardusvahed.
Idee hakata arvulist väärtust varchar väljal hoidma väärib Darwini auhinda (läheb jagamisele koos ideega "hoiame arvet tekstilisena"). Tänu selliste mõttemeistrite lahendusele oli minu eelmise projekti migreerimise maht esialgse <500 tunni asemel lõpuks rohkem kui 1000 tunniga lõhki. Tõsi, seal oli lisaks eeltoodutele ka muid "häid" ideid:
1. kuupäev - varchar (kasutajal vabatekstiväli). Nüüd teisenda muuhulgas väärtused 05.06.07, 27.15.07, 21.jaan.1970, kolmapäev. Lahenduse juures arvesta, et kirjeid on miljonites.
2. Hulk väärtusi, mida tuleks eristada - teeme suure varchari, kasutajale vabatekstivälja ja las kasutajad ise otsustavad, mis nad eraldajana kasutavad (tädiautomaat on kõige süstemaatilisem andmesisestaja, eksole). Kirjed taas miljonites.
jne...
Andmemudel ei ole lihtsalt linnukese tegemise koht. Korralik andmemudel vähendab tunduvalt ohtu, et mõne aasta pärast tuleb uuele arendajale piinlikult selgitada oma varasemaid "leiutisi".
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
Le Inc
HV Guru

liitunud: 06.09.2002
|
27.09.2010 12:01:17
|
|
|
Mul Oracle 10g baasis sätitud koma kohaks "koma" (locale EST) ja php on koma kohaks "punkt" (pole saanud komaga tööle). Häda ka selles et 0,2323 arvude puhul Oracle ei anna "0", vaid trükib ,2323. Selleks tegin ühe funktsiooni, pole küll tugev käpp selles aga igatahes töötab (ta teeb "koma" ümber "punktiks" ka):
php:
|
function koma($value) { $tehtud = 0; if ($string > -1 And $string < 0) { $tehtud = 1; } if ($string < 1 And $string > 0) { $vahe = ltrim($string, "0"); $tehtud = 1; } if ($tehtud == 0) { } return($tulemus); }
|
Ehk on abi.
|
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
54 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
27.09.2010 12:33:18
|
|
|
Le Inc, selline funktsioon ei sobi?
php:
|
/* string(5) "0,123" string(5) "0,123" string(5) "0,123" string(5) "0,123" string(6) "-0,123" string(6) "-0,123" string(5) "2,123" string(5) "2,123" */
|
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
nemu
HV vaatleja

liitunud: 22.01.2002
|
27.09.2010 13:47:18
|
|
|
number_format(str_replace(',', '.', $value), 2, ',', false);
|
|
|
Kommentaarid: 12 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
11 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
27.09.2010 13:57:25
|
|
|
nemu, antud funktsiooni kasutamine seab piirangu ette komakohtade arvuga, mistõttu võib kohati kehv lahendus olla.
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
nemu
HV vaatleja

liitunud: 22.01.2002
|
27.09.2010 15:10:37
|
|
|
Kõige pealt tuleks oracle vastavad parameeterid kohendada:
või siis vähemalt
NLS_NUMERIC_CHARACTERS="." |
"kohati kehv" == "enamasti vajalik/õige"
php:
|
function koma2($value, $decimals = 2) { } /* string(9) "-57,00000" string(7) "1,23457" */
|
|
|
Kommentaarid: 12 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
11 |
|
tagasi üles |
|
 |
Le Inc
HV Guru

liitunud: 06.09.2002
|
27.09.2010 15:24:39
|
|
|
mikk36 kirjutas: |
Le Inc, selline funktsioon ei sobi? |
Kindlasti sobib, ilusam ja lühem on sul. Ma kui pühapäeva programmeerija ei tee asju just nii nagu peaks.
|
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
54 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
27.09.2010 15:41:01
|
|
|
Mitte et ma mingi erilisem oleks, samuti hobikorras vaid.
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
|