Autor Zpráva
logic
Profil *
Ahoj,
jak převést číslo 14.30901732440531 na 1430901732440531 a pak zase zpět?
mimochodec
Profil
Odstraníš tečku, přidáš tečku.
logic
Profil *
Odstranit tečku bych uměl, ale jak mám tu tečku přidat?
mimochodec
Profil
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
[#4] mimochodec:
To bych opravdu nedělal, kvůli integer overflow na 32bit platformě.
logic
Profil *
Pokud s tím mám pracovat jako se stringem, tak jak tam zase dát tu čárku?
Sir Tom
Profil
logic:
Zjisti pozici čárky (tečky), zapamatuj si to, odstraň a znova přidej...
logic
Profil *
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.
Šéva
Profil *
Ahoj,
zjisti si pozici tečky v tom řetezci
$string="14.30901732440531"
$pozice=StrPos($string,".");
potom z toho řetězce tu tečku odstraň
$string=str_replace(".","",$string);
a pak tam tu tečku zase vrať
$delka=str_len($string);
$string=substr($string,0,$pozice).".".substr($string,$pozice,$delka);

s trochou štěstí by to mohlo i fungovat
Majkl578
Profil
[#9] Šéva:
Proč tak složitě? Vždyť stačí explode.
$parts = explode('.', $number);
Reverzně pak implode.
Šéva
Profil *
Majkl578:
V tu chvíli mě to nenapadlo,nicméně to je asi rychlejší a méně pracné
logic
Profil *
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
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
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 *
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;
logic
Profil *
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
http://uk3.php.net/sprintf
příklad #5
logic
Profil *
to mi nefunguje
sprintf('%1$10d',$id);
Chro
Profil
Ok, tak jinak.
echo sprintf('%09d', 5);
Alphard
Profil
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 *
Další dotaz:
jak odstranit z dvouciferného čísla nulu zleva?
Alphard
Profil
Myslíte stringu, že? ltrim(), vadou na kráse, že když vstupní číslo bude nula, nezbyde nic.
logic
Profil *
Alphard:
Potřebuju to pro převod čísla měsíce nebo dne v měsíci, tak to bude stačit.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0