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

361

我有像 3.21.6 这样的浮点数。

我需要将这个数字分离成整数和小数两部分。例如,值为 3.2 的数字将被拆分为两个数字,即 30.2

获取整数部分很容易:

n = Math.floor(n);

但是我在获取小数部分时遇到了问题。 我尝试过这个:

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

但它并不总是正确的工作。

先前的代码产生以下输出:

n = 3.1 // gives remainder = 1.1

我这里缺少了什么?


2
请注意,n = Math.floor(n); 仅适用于非负数,以返回您所需的结果(整数部分)。 - tsemer
请使用“%1”而不是“%2”来简化操作。 - masterxilo
4
decimalPart = number - Math.floor(number) 可以翻译为:小数部分等于数字减去向下取整后的结果。此外,你可以增加精度。parseFloat(decimalPart.toPrecision(3))表示保留 3 位小数的浮点数。 - Abhishek Chandel
要获取浮点数的整数部分,请使用Math.trunc(),而不是Math.floor()。 - undefined
33个回答

0

浮点十进制符号和数字格式可能因国家而异(),因此保留浮点部分的独立解决方案是:

getFloatDecimalPortion = function(x) {
    x = Math.abs(parseFloat(x));
    let n = parseInt(x);
    return Number((x - n).toFixed(Math.abs((""+x).length - (""+n).length - 1)));
}

这是一个国际化的解决方案,而不是依赖于位置的解决方案:

getFloatDecimalPortion = x => parseFloat("0." + ((x + "").split(".")[1]));

逐步解决方案描述:

  1. 使用parseFloat()确保输入的正确性
  2. 使用Math.abs()避免负数问题
  3. 使用n = parseInt(x)获取小数部分
  4. 使用x - n减去小数部分
  5. 现在我们有了没有小数部分的数字,但JavaScript可能会给我们额外的浮点数位,而我们不想要这些
  6. 因此,通过调用toFixed()限制浮点数中原始浮点数x的位数。计算方法是将原始数字x和数字n在其字符串表示中的长度之差作为浮点数部分中数字的数量。

-1

哇,让StackOverflow把事情复杂化。

为什么不这样做:

function splitDecimals(amt: number): [number, number] {
    const integerPart =
      (amt < 0 ? '-' : '') + Math.floor(Math.abs(amt)).toString();
    const amountString = amt.toString();
    const decimalPart =
      amountString.length > integerPart.length
        ? amountString.slice(integerPart.length)
        : '0';
    return [Number.parseInt(integerPart), Number.parseFloat(decimalPart)];
  }

如果你忽略Number.parseX,你会得到两个漂亮的字符串;否则,你会得到两个漂亮的数字。如果你不知道小数位数,这是你能做的最好的。

123.4567 => [123, 0.4567]
0.111222333444555 => [0, 0.111222333444555]
-123.4567 => [-123, 0.4567]
123.111222333444 => [123, 0.111222333444]
111222333444555.11 => [111222333444555, 0.11]
2230000000 => [2230000000, 0]

-9
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

4
那不像是 JavaScript! - Ch'marr
1
这不是 JavaScript。 - Amrut
在JS中应该这样写:var a = 3.2; var b = parseInt(a, 10); var c = a - b; - Ju-v

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接