1.Sestavil jsem několik jednoduchých konverzních funkcí - číslo: c=F(a)+F(b)
Dále jsem sepsal kolekci vzorků "čísel"(=vstupních řetězců a,b zapisovaných do PROMPTu), které nedávají v těchto funkcích shodné výsledky.
2.Pro jistotu jsem přidal samostatnou funkci nahrazující příkaz PROMPT,ale poskytující hodnotu typu Number a ošetřující stav, kdy je vstupní $ neplatný (zopakovaním volání PROMPTu).
Použití: a=F("a") b=F("b") c=a+b (tento způsob zpracování každého vstupu zvlášť považuju za výhodnější).
Obojí najdeš v kódu (rozhodně stojí za to si konverzní funkce otestovat - aspoň v mém případě o překvapení nebyla nouze)
<!-- testováno v IE7 -->
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<meta http-equiv="Content-Language" content="cs"><title>Konverze řetězců na čísla </title>
<STYLE>
BODY {font:80% monospace; MARGIN: 1em}
PRE {line-height:0; MARGIN-LEFT : 0.5em}
P {MARGIN: 2pt;}
</STYLE>
</head><body onload="output('')">
<script>
var e=Math.E, r="Math.random()";
var a="1", b="2", c, op;
function input1(){
a=prompt("zadej hodnotu a (číslo)",a);
b=prompt("zadej hodnotu b (číslo)",b);
output("");
}
function dej(co){
try{ return Number(eval(prompt("zadej hodnotu "+co+" (číslo/výraz)",eval(co)))) }
catch(e){return dej(co)}
}
function input2(){
var aa=dej("a");
b=dej("b");
a=aa;
output("");
output("c = a + b = " + (c=a+b));
}
function output(txt){
if (txt) op+="<p>"+txt+"</p>"; else op="";
document.getElementById("output").innerHTML ="<h4>[ a = "+a+" ] [ b = "+b+" ]</h4>"+op;
}
function calc(link){
var sum=link.innerText;
output(sum + " = " + eval(sum));
}
</script>
<b>VSTUPNÍ HODNOTY HODNÉ OTESTOVÁNÍ:</b>
<pre>[ "120" "0120" "0x120" "O12" ] O12 ...velké o Vstup: a="011" b="0x11" ...základní rozdělení metod do skupin</pre>
<pre>[ ".1" "101.2" "101,2" "1OO" ] 1OO ...velké o Pozor na (3)(4)(5) </pre>
<pre>[ "0.1" " -1.23 " "- 1.23" "++1.23" "-.321" ] Co mezery & znaménka & tečka & exponent... </pre>
<pre>[ "-1e3" "123E-3" "0x1e2" "10.e-2"] ..........................................?</pre>
<pre>[ "019" ] pozor na (4a) </pre>
<pre>[ "2e-5" ".0" ] pozor na (4)(6)</pre>
<pre>[ "01e0" "01.0" ] pozor na (5)(6)</pre>
<pre>[ "10+1/8" "010+1/8" "Math.PI" "Math.sqrt(9*9)" "eval(r)" "e" "a" "a++" ] (5a)(5b)</pre>
<pre>[ "101" "101,2" "101,16" ] (6)</pre>
<hr>
<a href='#' onclick='input1();return false'>ZADAT HODNOTY a,b</a>
<a href='#' onclick='input2();return false'>ZADAT,VYHODNOTIT & SEČÍST HODNOTY a,b</a>;
<nobr>(Zkuste: "10+1" "010+1" "a" "a+100" "pi" "pi=Math.PI" "pi*(a*a+b*b)")</nobr>
<br><br>
(1.) <a href='#' onclick='calc(this);return false'>
c = a+b </a> .........funguje správně jen pokud jsou a,b typu číslo.<br>
(2a) <a href='#' onclick='calc(this);return false'>
c = 1*a+1*b</a><br>
(2b) <a href='#' onclick='calc(this);return false'>
c = (a-0)+(b-0)</a><br>
(2c) <a href='#' onclick='calc(this);return false'>
c = Number(a)+Number(b)</a><br>
(3.) <a href='#' onclick='calc(this);return false'>
c = parseFloat(a)+parseFloat(b)</a><br>
(4a) <a href='#' onclick='calc(this);return false'>
c = parseInt(a)+parseInt(b)</a><br>
(4b) <a href='#' onclick='calc(this);return false'>
c = parseInt(a,10)+parseInt(b,10)</a><br>
(5a) <a href='#' onclick='calc(this);return false'>
c = Number(eval(a))+Number(eval(b))</a>
Lze zadat číslo jako matem.výraz <br>
(5b) <a href='#' onclick='calc(this);return false'>
c = eval(a)+eval(b)</a><br>
(6.) <a href='#' onclick='calc(this);return false'>
c = Number(eval('parseInt('+a+')')+Number(eval("parseInt("+b+")")))</a>
Lze zadat číslo v libovolné čís.soustavě<br>
<div id='output'></div>
</body></html>