Autor | Zpráva | ||
---|---|---|---|
logic Profil * |
#1 · Zasláno: 16. 4. 2012, 18:48:41
Ahoj,
jak převést číslo 14.30901732440531 na 1430901732440531 a pak zase zpět? |
||
mimochodec Profil |
#2 · Zasláno: 16. 4. 2012, 18:49:45
Odstraníš tečku, přidáš tečku.
|
||
logic Profil * |
#3 · Zasláno: 16. 4. 2012, 19:58:37
Odstranit tečku bych uměl, ale jak mám tu tečku přidat?
|
||
mimochodec Profil |
#4 · Zasláno: 16. 4. 2012, 20:14:11
logic:
Jestli máš jistotu, že je to číslo, pracuj s tím jako s číslem. Vynásob něčím a pak to zase vyděl. |
||
Majkl578 Profil |
#5 · Zasláno: 16. 4. 2012, 20:16:31
[#4] mimochodec:
To bych opravdu nedělal, kvůli integer overflow na 32bit platformě. |
||
logic Profil * |
#6 · Zasláno: 16. 4. 2012, 20:23:45
Pokud s tím mám pracovat jako se stringem, tak jak tam zase dát tu čárku?
|
||
Sir Tom Profil |
#7 · Zasláno: 16. 4. 2012, 20:29:41
logic:
Zjisti pozici čárky (tečky), zapamatuj si to, odstraň a znova přidej... |
||
logic Profil * |
#8 · Zasláno: 16. 4. 2012, 21:20:32
Pozice čárky je mi známa. Na to přidání čárky se celou dobu ptám. Mám to rozdělit pomocí substr na řetězec o délce dva znaky a zbytek a pak poslučovat, nebo je na to jiná funkce?
Myslel jsem, že když tam je ta čárka, že s tím nepůjdou provádět matematické operace, tedy že se pracuje jen s celými čísly. Min, Max, odčítání a dělení, ale teď se zdá, že tomu číslu nic není, tak snad to ani nemusím převádět. |
||
Časová prodleva: 3 dny
|
|||
Šéva Profil * |
#9 · Zasláno: 19. 4. 2012, 09:45:58
Ahoj,
zjisti si pozici tečky v tom řetezci $string="14.30901732440531" $pozice=StrPos($string,"."); $string=str_replace(".","",$string); $delka=str_len($string); $string=substr($string,0,$pozice).".".substr($string,$pozice,$delka); s trochou štěstí by to mohlo i fungovat |
||
Majkl578 Profil |
|||
Šéva Profil * |
#11 · Zasláno: 19. 4. 2012, 10:39:20
Majkl578:
V tu chvíli mě to nenapadlo,nicméně to je asi rychlejší a méně pracné |
||
logic Profil * |
#12 · Zasláno: 19. 4. 2012, 22:08:31 · Upravil/a: logic
Jde s tím normálně provádět matematické operace i když je to string.
Ale chci se zeptat jinak. $str=" 14.15203162113714"; // jedna varianta (s tabulátory) $str="14.15203162113714"; // druhá varianta $num=(float)$str; // sice převede na číslo, jenže ho zkrátí na 14.1520316211 Je ještě nějaký delší použitelný typ než float? A ještě jednu věc řeším a nevede se mi: jak ověřit jestli to číslo není nula? Vždycky když jsem použil operátor === nebo !== tak mi nedokázal rozpoznat jestli je tam nula (chyba) $num==="0"
|
||
pcmanik Profil |
#13 · Zasláno: 19. 4. 2012, 22:56:35
logic:
No to bude asi tym ze porovnavas cislo so stringom a === sluzi na presne porovnavanie, teda vratane typu premennej. Staci ked to zapises $num === 0 |
||
Majkl578 Profil |
#14 · Zasláno: 20. 4. 2012, 02:20:47
logic:
„Je ještě nějaký delší použitelný typ než float?“ V jiných jazycích bývá double, v PHP nikoliv. U provádění mat. operací nad čísly s plovoucí desetinnou čárkou je důležité rozhodnutí - vadí mi ztráta přesnosti? Pokud ne, můžeš použít float jako ty. Pokud ano, pak je vhodné namísto typu float udržovat číslo jako string a operace provádět přes BC Math nebo GMP. pcmanik: „Staci ked to zapises $num === 0“ Nestačí, protože má typ float . Musí porovnávat vůči 0.0 .
|
||
logic Profil * |
#15 · Zasláno: 20. 4. 2012, 12:18:04
Už jsem to celé nějak vyřešil. Rozdíl oproti tomu výše je jen v názvech proměnných.
foreach ($arr as $line): @list($x, $y, $z) = explode(',', $line); if(stristr($x,".")===false OR stristr($y,".")===false) break; // POJISTKA PROTI CHYBĚ NA KONCI ŘÁDKU, kdy se dosazuje číslo bez tečky (nula) $x_arr[] = trim($x); $y_arr[] = trim($y); endforeach; |
||
Časová prodleva: 2 roky
|
|||
logic Profil * |
#16 · Zasláno: 3. 2. 2014, 09:44:10
Kdysi jsem tu psal dotaz na téma jak převést desetínné číslo a nyní řeším podobnou věc, ale potřebuju číslo 9 převést tak, aby obsahovat devět nul, tedy doplnění zbývajících nul zleva. Nevím jak se tomu převodu říká, takže jsem nic nenašel.
|
||
Chro Profil |
#17 · Zasláno: 3. 2. 2014, 09:57:31
http://uk3.php.net/sprintf
příklad #5 |
||
logic Profil * |
#18 · Zasláno: 3. 2. 2014, 10:03:40
to mi nefunguje
sprintf('%1$10d',$id); |
||
Chro Profil |
#19 · Zasláno: 3. 2. 2014, 10:09:36
Ok, tak jinak.
echo sprintf('%09d', 5); |
||
Alphard Profil |
#20 · Zasláno: 3. 2. 2014, 11:42:07
Uvedené řešení pracuje s číslem, které má omezený rozsah. Vzhledem k předchozímu uvádím čistě textovou variantu pro prakticky neomezené vstupní hodnoty.
str_pad($number, 9, '0', STR_PAD_LEFT); |
||
logic Profil * |
#21 · Zasláno: 4. 2. 2014, 23:31:23
Další dotaz:
jak odstranit z dvouciferného čísla nulu zleva? |
||
Alphard Profil |
#22 · Zasláno: 4. 2. 2014, 23:41:20
Myslíte stringu, že? ltrim(), vadou na kráse, že když vstupní číslo bude nula, nezbyde nic.
|
||
logic Profil * |
#23 · Zasláno: 4. 2. 2014, 23:45:59
Alphard:
Potřebuju to pro převod čísla měsíce nebo dne v měsíci, tak to bude stačit. |
||
Časová prodleva: 11 let
|
0