重要的是要注意我不是在寻找舍入函数.我正在寻找一个函数,它返回任意数字的简化十进制表示中的小数位数.也就是说,我们有以下内容:
decimalPlaces(5555.0); //=> 0
decimalPlaces(5555); //=> 0
decimalPlaces(555.5); //=> 1
decimalPlaces(555.50); //=> 1
decimalPlaces(0.0000005); //=> 7
decimalPlaces(5e-7); //=> 7
decimalPlaces(0.00000055); //=> 8
decimalPlaces(5.5e-7); //=> 8
Run Code Online (Sandbox Code Playgroud)
我的第一直觉是使用字符串表示:拆分'.',然后打开'e-',并进行数学计算,如此(示例是详细的):
function decimalPlaces(number) {
var parts = number.toString().split('.', 2),
integerPart = parts[0],
decimalPart = parts[1],
exponentPart;
if (integerPart.charAt(0) === '-') {
integerPart = integerPart.substring(1);
}
if (decimalPart !== undefined) {
parts = decimalPart.split('e-', 2);
decimalPart = parts[0];
}
else {
parts = integerPart.split('e-', 2);
integerPart = parts[0];
}
exponentPart = parts[1]; …Run Code Online (Sandbox Code Playgroud) 有没有比我的例子更好的方法来计算数字上的小数位数?
var nbr = 37.435.45;
var decimals = (nbr!=Math.floor(nbr))?(nbr.toString()).split('.')[1].length:0;
Run Code Online (Sandbox Code Playgroud)
更好的是,我的意思是更快地执行和/或使用本机JavaScript函数,即.像nbr.getDecimals()这样的东西.
提前致谢!
编辑:
修改series0ne答案后,我能够管理的最快方法是:
var val = 37.435345;
var countDecimals = function(value) {
if (Math.floor(value) !== value)
return value.toString().split(".")[1].length || 0;
return 0;
}
countDecimals(val);
Run Code Online (Sandbox Code Playgroud)
我在Javascript中有以下代码:
var m1 = 2232.00;
var percent = (10/100);
var total = percent*m1;
alert(total);
Run Code Online (Sandbox Code Playgroud)
问题是变量"total"给了我"223.20000000000002",它应该是"223.2",我该怎么做才能得到正确的值?
我需要添加零,以便每个数字至少有两位小数,但没有舍入.例如:
5 --> 5.00
5.1 --> 5.10
5.11 --> 5.11 (no change)
5.111 --> 5.111 (no change)
5.1111 --> 5.1111 (no change)
Run Code Online (Sandbox Code Playgroud)
我的函数缺少一个IF来检查少于两个小数位:
function addZeroes( num ) {
var num = Number(num);
if ( //idk ) {
num = num.toFixed(2);
}
return num;
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
除了以下两个之外,还会发布一个替代答案.(请记住,我不是专家,这只是用于文本输入,而不是用于解析复杂值,例如可能存在浮点问题的颜色等)
function addZeroes( value ) {
//set everything to at least two decimals; removs 3+ zero decimasl, keep non-zero decimals
var new_value = value*1; //removes trailing zeros
new_value = new_value+''; //casts it to string
pos …Run Code Online (Sandbox Code Playgroud) 我需要验证 cshtml 页面中的文本框仅接受负数或正数以及最多 6 位小数。这是我到目前为止所尝试过的。
function AcceptUptoSixDecimalPlacesWithNegative(event, elem) {
if ((event.which != 46 || $(elem).val().indexOf('.') != -1) && (event.which < 48 || event.which > 57)) {
if (event.keyCode !== 8 && event.keyCode !== 46 && event.keyCode !== 9 && event.keyCode !== 0 && event.keyCode !== 45) { //exception
event.preventDefault();
}
}
var text = $(elem).val();
if ((text.indexOf('.') != -1) && (text.substring(text.indexOf('.')).length > 6)) {
if (event.keyCode !== 8 && event.keyCode !== 46 && event.keyCode !== 9) { //exception
event.preventDefault();
} …Run Code Online (Sandbox Code Playgroud) javascript ×5
decimal ×2
fractions ×1
jquery ×1
mootools ×1
multiplying ×1
numbers ×1
precision ×1
razor ×1