我很新的HTML,JavaScript和CSS所以请原谅,如果我的问题听起来愚蠢的给你。 我的问题是如何防止功能toFixed()
从十进制数四舍五入。
这里是我的链接: http://jsfiddle.net/RWBaA/4/
我正在试图做的是我检查输入如果一个有效的十进制数每当用户在文本框中。 同时我也想检查,如果输入的是一个有效的货币,这意味着它只能在小数点右边增加两个数字。 当用户在小数点后进入第三号,如果所述第三数目是> = 5小数点舍入后到最接近的百分之数第二问题是。
测试输入:
Input Output
123456.781 -> 123456.78
123456.786 -> 123456.79
为什么我的代码不允许铬箭头键?
请帮忙。 如果你有一个更好的解决方案,您可以自由建议。 提前致谢。
轮的数量(下)到最接近的分第一:
val = Math.floor(100 * val) / 100;
编辑它已经指出,这对于失败例如1.13。 我应该知道更好喽!
失败的原因是1.13的内部浮点表示非常略低于1.13 - 乘以由100不产生113,但112.99999999999998578915然后四舍五入下来花费1.12
已经重新阅读的问题,看来你真的只是想执行输入验证(见下文),在这种情况下,你应该用正常的形式验证技术,你不应该使用.toFixed()
在所有。 这功能是呈现数字,而不是与他们计算。
$('#txtAmount').on('keypress', function (e) {
var k = String.fromCharCode(e.charCode);
var v = this.value;
var dp = v.indexOf('.');
// reject illegal chars
if ((k < '0' || k > '9') && k !== '.') return false;
// reject any input that takes the length
// two or more beyond the decimal point
if (dp >= 0 && v.length > dp + 2) {
return false;
}
// don't accept >1 decimal point, or as first char
if (k === '.' && (dp >= 0 || v.length === 0)) {
return false;
}
});
这是更简单:
function truncateToDecimals(num, dec = 2) {
const calcDec = Math.pow(10, dec);
return Math.trunc(num * calcDec) / calcDec;
}
所以:
truncateToDecimals(123456.786) -> 123456.78
此外,为了防止toFixed()从四舍五入十进制数,并让你的电话号码到小数点后两位,你可以利用这一点,
val = (Math.floor(100 * val) / 100).toFixed(2);
你可以试试这个,就不会圆您小数
var toFixed = function(val, decimals) {
var arr = ("" + val).split(".")
if(arr.length === 1)
return val
var int = arr[0],
dec = arr[1],
max = dec.length - 1
return decimals === 0 ? int :
[int,".",dec.substr(0, decimals > max ? max : decimals)].join("")
}
如果你想避免四舍五入...例。 1.669 => 1.67,548.466 => 548.47
函数的结果看起来像:1.669 => 1.66,548.466 => 548.46
那么下面的JQuery功能会帮助你。 据测试,工作正常。
<input name="a" type="text" id="a" size="7%" tabindex="2">
$('#a').keyup(function(e){
if($(this).val().indexOf('.')!=-1){
if($(this).val()=="." && $(this).val().length==1){
this.value = parseFloat(0).toFixed(1);
}else if($(this).val().split(".")[1].length > 2){
if( isNaN( parseFloat( this.value ) ) )
return;
this.value = $(this).val().split(".")[0]+"."+$(this).val().split(".")[1].substring(0,2);
}
}
});