有没有JS函数来查找小数点前后的值

时间:2011-10-24 20:07:41

标签: javascript jquery

我正在使用JavaScript验证十进制数。 我只是使用NaN

var a = 12345.67 是否有任何javascript函数来获取小数点前后的计数或值本身。

before()  should return 1234
after() should return 67

请不要建议子串!

7 个答案:

答案 0 :(得分:29)

var a = 12345.67;

alert(a.toString().split(".")[0]); ///before
alert(a.toString().split(".")[1]); ///after

这是一个简单的小提琴http://jsfiddle.net/qWtSc/


zzzzBov的建议是

Number.prototype.before = function () {
  var value = parseInt(this.toString().split(".")[0], 10);//before
  return value ? value : 0;
}

Number.prototype.after = function () {
  var value = parseInt(this.toString().split(".")[1], 10);//after
  return value ? value : 0;
}

用法

alert(a.before()); ///before
alert(a.after()); ///after

答案 1 :(得分:12)

before很简单。这只是一个向下的操作。

var before = function(n) {
  return Math.floor(n);
};
没有字符串处理,

after会更难。我的意思是你将如何处理after(Math.PI)?毕竟,你不能保持一个无限位数的整数。

但是通过一些字符串处理它很容易,只是知道它不会是精确的,因为浮点数学的奇迹。

var after = function(n) {
  var fraction = n.toString().split('.')[1];
  return parseInt(fraction, 10);
};

答案 2 :(得分:2)

var decimalPlaces = 2;    
var num = 12345.673
var roundedDecimal = num.toFixed(decimalPlaces);

var intPart = Math.floor(roundedDecimal);
var fracPart = parseInt((roundedDecimal - intPart), 10);

//or

var fractPart = (roundedDecimal - intPart) * Math.pow(10, decimalPlaces);

答案 3 :(得分:2)

播放其他答案...并且您想要一个'数字'版本..仍然最容易将其转换为字符串并解决分割功能......

function getNatural(num) {
    return parseFloat(num.toString().split(".")[0]);
}
function getDecimal(num) {
    return parseFloat(num.toString().split(".")[1]);
}
var a = 12345.67;

alert(getNatural(a)); ///before
alert(getDecimal(a)); ///after

http://jsfiddle.net/rlemon/qWtSc/1/

答案 4 :(得分:1)

要查找点后的字符数/长度:

var a = 12345.67;
var after_dot = (a.toString().split(".")[1]).length;
var before_dot= (a.toString().split(".")[0]).length;

答案 5 :(得分:0)

不幸的是,使用数学函数无法以可靠的方式获得派系部分,因为根据所使用的Javascript引擎,经常会出现奇怪的舍入。 最好的办法是将其转换为字符串,然后检查结果是否为十进制或科学记数法。

Number.prototype.after = function() {
    var string = this.toString();
    var epos = string.indexOf("e");
    if (epos === -1) { // Decimal notation
        var i = string.indexOf(".");
        return i === -1 ? "" : n.substring(i + 1);
    }
    // Scientific notation
    var exp = string.substring(epos + 1) - 0; // this is actually faster
                                              // than parseInt in many browsers
    var mantix = n.string.substring(0, epos).replace(".", "");
    if (exp >= -1) return mantix.substring(exp + 1);
    for (; exp < -1; exp++) mantix = "0" + mantix;
    return mantix;
}

答案 6 :(得分:0)

如果小数点后的数字是固定的,则此解决方案无需转换为字符串即可工作。

此示例显示了小数点后 2 位数字的解决方案。

小数点前:

   const wholeNum = Math.floor(num);

小数点后:

   let decimal = (num - wholeNum) * 100