数量が増えるにつれて、書籍の価格を生成するためにajaxを使用しています。私が持っている唯一の問題は、合計(JSコードを参照)を生成しようとしたときに、いくつかの問題が発生したことです(値は加算の代わりに連結されます)。私は変数 '量'を四捨五入して問題を解決しました。しかし、私は連結が起こった理由を理解しようとしています。ここに私のPHPコードです:なぜこの値をもう一度丸める必要がありますか?
if(isset($_GET["amount1"]))
{
$amount1 = $_GET["amount1"];
$error="";
if($amount1 == "" || !preg_match("/^[0-9]+$/", $amount1))
{
$error .= "Please enter a valid number";
echo $error;
}
else{
echo round($amount1*16.65, 2);
}
}
そして、これは、JSコードです:
if(xhr.status == 200 && xhr.readyState == 4)
{
var res = xhr.responseText;
if(res.match(/\d+/)== null){
document.getElementById("err3").innerHTML = res;
document.getElementById("book3").innerHTML = "";
total(0,3);
}
else{
document.getElementById("book3").innerHTML = res;
document.getElementById("err3").innerHTML = "";
total(res,3);
}
}
var book1 = 0;
var book2 = 0;
var book3 = 0;
function total(amount, book)
{
// amount = Math.round(amount*100)/100; --> this is what solved it but I don't
//know why I need it since amount was rounded by PHP code
if(book == 1)
book1 = amount;
if(book == 2)
book2 = amount;
if(book == 3)
book3 = amount;
var total = book1 + book2 + book3;
document.getElementById("total").innerHTML = total;
}
おかげ
明らかにもっと重要です。簡単なメモのように、 'Number()'を使うと文字列に応じて文字列をintまたはfloatに設定しますが、parse floatはint値に切り捨てられますが、余分なメモリはfloatとして保持されます。 – Anthony