首页 文章

使用JavaScript获取数字的小数部分

提问于
浏览
183

我有像 3.21.6 这样的浮动数字 .

我需要将数字分成整数和小数部分 . 例如, 3.2 的值将分为两个数字,即 30.2

获取整数部分很简单:

n = Math.floor(n);

但是我无法获得小数部分 . 我试过这个:

remainer = n % 2; //obtem a parte decimal do rating

但它并不总是正常工作 .

前面的代码具有以下输出:

n = 3.1 => remainer = 1.1

我在这里缺少什么?

17 回答

  • 4

    根据您之后会给出的用途,但这个简单的解决方案也可以帮助您 .

    我不是说它是一个很好的解决方案,但对于一些具体案例来说

    var a = 10.2
    var c = a.toString().split(".")
    console.log(c[1] == 2) //True
    console.log(c[1] === 2)  //False
    

    但这需要比@Brian M. Hunt提出的解决方案更长的时间

    (2.3 % 1).toFixed(4)
    
  • 58

    语言独立方式:

    var a = 3.2;
    var fract = a * 10 % 10 /10; //0.2
    var integr = a - fract; //3
    

    请注意,它只适用于具有一个fractioanal长度的数字)

  • 1

    您可以将其转换为字符串并使用 replace 方法将整数部分替换为零,然后将结果转换回数字:

    var number = 123.123812,
        decimals = +number.toString().replace(/^[^\.]+/,'0');
    
  • 3

    使用 1 ,而不是 2 .

    js> 2.3 % 1
    0.2999999999999998
    
  • 2
    var decimal = n - Math.floor(n)
    

    虽然这不适用于减号,但我们可能不得不这样做

    n = Math.abs(n); // Change to positive
    var decimal = n - Math.floor(n)
    
  • 25

    你可以转换为字符串,对吗?

    n = (n + "").split(".");
    
  • -9

    0.2999999999999998怎么回答?如果我是提问者,我会想要答案.3 . 我们这里有的是错误的精确度,我对floor,%等的实验表明Javascript喜欢这些操作的错误精度 . 所以我认为使用转换为字符串的答案是正确的 .

    我会这样做:

    var decPart = (n+"").split(".")[1];
    

    具体来说,我使用100233.1,我想要答案“.1” .

  • 5

    这是我如何做到的,我认为这是最简单的方法:

    var x = 3.2;
    int_part = Math.trunc(x); // returns 3
    float_part = Number((x-int_part).toFixed(2)); // return 0.2
    
  • 284

    一个简单的方法是:

    var x = 3.2;
    var decimals = x - Math.floor(x);
    console.log(decimals); //Returns 0.20000000000000018
    

    不幸的是,这并没有返回确切的值 . 但是,这很容易修复:

    var x = 3.2;
    var decimals = x - Math.floor(x);
    console.log(decimals.toFixed(1)); //Returns 0.2
    

    如果你不知道小数位数,你可以使用它:

    var x = 3.2;
    var decimals = x - Math.floor(x);
    
    var decimalPlaces = x.toString().split('.')[1].length;
    decimals = decimals.toFixed(decimalPlaces);
    
    console.log(decimals); //Returns 0.2
    
  • 1

    无论小数分隔符的区域设置如何,以下情况都适用...条件只有一个字符用于分隔符 .

    var n = 2015.15;
    var integer = Math.floor(n).toString();
    var strungNumber = n.toString();
    if (integer.length === strungNumber.length)
      return "0";
    return strungNumber.substring(integer.length + 1);
    

    它不漂亮,但它是准确的 .

  • 75

    如果精度很重要并且您需要一致的结果,这里有一些命题会将任何数字的小数部分作为字符串返回,包括前导"0." . 如果你需要它作为一个浮点数,最后添加 var f = parseFloat( result ) .

    如果小数部分等于零,则返回“0.0” . Null,NaN和未定义的数字未经过测试 .

    1. Array.split

    var nstring = (n + ""),
        narray  = nstring.split("."),
        result  = "0." + ( narray.length > 1 ? narray[1] : "0" );
    

    2. String.substring,String.indexOf

    var nstring = (n + ""),
        nindex  = nstring.indexOf("."),
        result  = "0." + (nindex > -1 ? nstring.substring(nindex + 1) : "0");
    

    3. Math.floor,Number.toFixed,String.indexOf

    var nstring = (n + ""),
        nindex  = nstring.indexOf("."),
        result  = ( nindex > -1 ? (n - Math.floor(n)).toFixed(nstring.length - nindex - 1) : "0.0");
    

    4. Math.floor,Number.toFixed,String.split

    var nstring = (n + ""),
        narray  = nstring.split("."),
        result  = (narray.length > 1 ? (n - Math.floor(n)).toFixed(narray[1].length) : "0.0");
    

    这是一个jsPerf链接:https://jsperf.com/decpart-of-number/

    我们可以看到命题#2是最快的 .

  • 0

    您可以使用 parseInt() 函数来获取整数部分,而不是使用它来提取小数部分

    var myNumber = 3.2;
    var integerPart = parseInt(myNumber);
    var decimalPart = myNumber - integerPart;
    
  • 11

    我有一个案例,我知道所有相关的数字只有一个小数,并希望得到小数部分为整数,所以我最终使用这种方法:

    var number = 3.1,
        decimalAsInt = Math.round((number - parseInt(number)) * 10); // returns 1
    

    这也适用于整数,在这些情况下返回0 .

  • 4

    我在用:

    var n = -556.123444444;
    var str = n.toString();
    var decimalOnly = 0;
    
    if( str.indexOf('.') != -1 ){ //check if has decimal
        var decimalOnly = parseFloat(Math.abs(n).toString().split('.')[1]);
    }
    

    输入:-556.123444444

    结果: 123444444

  • 0

    看完其中的几个后,我现在正在使用......

    var rtnValue = Number(7.23);
    var tempDec = ((rtnValue / 1) - Math.floor(rtnValue)).toFixed(2);
    
  • 9
    n = Math.floor(x);
    remainder = x % 1;
    
  • 3
    float a=3.2;
    int b=(int)a; // you'll get output b=3 here;
    int c=(int)a-b; // you'll get c=.2 value here
    

相关问题