我正在尝试混合/创建货币格式,并从输入框中计算数据。问题是当我将编号插入卖出表格:1000和QTY:2时,结果为2,应该是2000,并且使用货币格式为2.000。我已经成功创建货币格式和计算成功。
我的代码:
form :
<div class="row">
<div class="col-lg-6"><b>Sell (pcs)</b>
<input class="form-control" name="h_jual" type="text" id="a" size="30" onkeyup="count();" onkeydown="return numbersonly(this, event);"/>
</div>
<div class="col-lg-6"><b>Qty</b>
<input class="form-control" name="qty" type="text" id="b" size="30" onkeyup="count();"/>
</div>
<div class="col-lg-6"><b>Total</b>
<input class="form-control" name="total" type="text" id="c" size="30" onkeyup="count();" readonly/>
</div>
</div>
计算脚本:
<script type="text/javascript">
function count() {
var a = $("#a").val();
var b = $("#b").val();
c = a * b;
$("#c").val(c);
}
</script>
货币格式脚本:
function titik() {
var angka = bersihPemisah(bersihPemisah(bersihPemisah(bersihPemisah(document.getElementById('harga').value)))); //input ke dalam angka tanpa titik
if (document.getElementById('harga').value == "") {
alert("Jangan Dikosongi");
document.getElementById('harga').focus();
return false;
}
else
if (angka >= 1) {
alert("angka aslinya : "+angka);
document.getElementById('harga').focus();
document.getElementById('harga').value = tandaPemisahTitik(angka);
return false;
}
}
function tandaPemisahTitik(b){
var _minus = false;
if (b<0) _minus = true;
b = b.toString();
b=b.replace(".","");
b=b.replace("-","");
c = "";
panjang = b.length;
j = 0;
for (i = panjang; i > 0; i--){
j = j + 1;
if (((j % 3) == 1) && (j != 1)){
c = b.substr(i-1,1) + "." + c;
} else {
c = b.substr(i-1,1) + c;
}
}
if (_minus) c = "-" + c ;
return c;
}
function numbersonly(ini, e){
if (e.keyCode>=49){
if(e.keyCode<=57){
a = ini.value.toString().replace(".","");
b = a.replace(/[^d]/g,"");
b = (b=="0")?String.fromCharCode(e.keyCode):b + String.fromCharCode(e.keyCode);
ini.value = tandaPemisahTitik(b);
return false;
}
else if(e.keyCode<=105){
if(e.keyCode>=96){
//e.keycode = e.keycode - 47;
a = ini.value.toString().replace(".","");
b = a.replace(/[^d]/g,"");
b = (b=="0")?String.fromCharCode(e.keyCode-48):b + String.fromCharCode(e.keyCode-48);
ini.value = tandaPemisahTitik(b);
//alert(e.keycode);
return false;
}
else {return false;}
}
else {
return false; }
}else if (e.keyCode==48){
a = ini.value.replace(".","") + String.fromCharCode(e.keyCode);
b = a.replace(/[^d]/g,"");
if (parseFloat(b)!=0){
ini.value = tandaPemisahTitik(b);
return false;
} else {
return false;
}
}else if (e.keyCode==95){
a = ini.value.replace(".","") + String.fromCharCode(e.keyCode-48);
b = a.replace(/[^d]/g,"");
if (parseFloat(b)!=0){
ini.value = tandaPemisahTitik(b);
return false;
} else {
return false;
}
}else if (e.keyCode==8 || e.keycode==46){
a = ini.value.replace(".","");
b = a.replace(/[^d]/g,"");
b = b.substr(0,b.length -1);
if (tandaPemisahTitik(b)!=""){
ini.value = tandaPemisahTitik(b);
} else {
ini.value = "";
}
return false;
} else if (e.keyCode==9){
return true;
} else if (e.keyCode==17){
return true;
} else {
//alert (e.keyCode);
return false;
}
}
任何帮助都会非常感谢,谢谢
您可以提供错误还是出了什么问题?您可能不会将您的输入解析为int,即var a = parseInt($("#a").val());
您在哪里调用titik()
函数?
为什么您在id="c"
上致电onkeyup="count()"
?
编辑:我已经更新了小提琴,以考虑输入中的"点"。检查这个小提琴。
function count() {
var a = parseFloat($("#a").val().replace(/(.)|(,)/g,(m,p1,p2) => p1 ? p1 = "" : p2 = "."));
var b = parseFloat($("#b").val().replace(/(.)|(,)/g,(m,p1,p2) => p1 ? p1 = "" : p2 = "."));
c = a * b;
if (!isNaN(c)) {
$("#c").val(c);
}
}
**旧小提琴。和旧代码:
function count() {
var a = parseInt($("#a").val());
var b = parseInt($("#b").val());
c = a * b;
if (!isNaN(c)) {
$("#c").val(c);
}
}
毫无疑问,有很多方法可以处理此操作,因为我们甚至不能同意如何表达数字小数 - 我们是否使用点或逗号?除非我在搜索模糊逻辑中没有发现一些魔术子弹似乎是最好的方法:
主要目的是检测到定界符:
- 检查逗号和DOT是否存在,因为这应该意味着小数指针是最后使用的指针 - 解析数字。
- 检测您的格式,即您是逗号或点用户。应将其视为模糊逻辑的首选和主要假设。也就是说,您是否将100或100.00 写入100
- 尝试用1。 的假设解码用户输入数字。
- 相反地查看数字,如果最后两个数字后面是逗号或十进制的数字,则将其作为定界符和解析。
希望没有数字5,也可以主张您的号码某些条件,以便您可以进行一些计算,并看到这是不对的,并在发布之前验证了数字。
也可能是一个好主意,将占位符用于需要数字以包含样本号的字段,以便用户看到要使用的定界符。
如果您有一个国际网站,其中包括来自Maby的各地的数字,则可以使用Geoip来定位用户的位置。这可以用来预选最有可能的定界符 - 就像在斯堪的纳维亚半岛一样,我们使用逗号作为定界数,在美国,它们使用dot。
在我看来,除非您知道您的数字来自何处,否则这里没有明确的税收 - 互联网意味着您没有任何线索。