代码之家  ›  专栏  ›  技术社区  ›  Danyx

在Javascript中使用小小数点

  •  1
  • Danyx  · 技术社区  · 6 年前

    我目前正在处理小数点,但Javascript似乎一直在舍入。

    例如,下面是我需要做的一个计算:

    (1+0.05)^(1/12)

    这应该会返回1.0040741237836483016054196026721,但是我得到的是1。

    我试过使用Big.js库,但它仍然只返回1,我需要这些小数点才能得到准确的结果,有没有办法指定我想要的小数点位数?

    3 回复  |  直到 6 年前
        1
  •  4
  •   FK82    6 年前

    这个 ^ 符号有 位异或 javascript中的语义。见 here .

    下面的代码片段向您展示了如何获得正确的结果:

    console.log(`(1 + 0.05) ^ (1/12) = ${Math.pow((1 + 0.05), (1/12))}`);
        2
  •  1
  •   Jason Cust    6 年前

    正如在另一个答案中指出的,您可以使用vanilla JS,但是如果您需要精确地执行数学运算,则可以查看如下库 decimal.js 以帮助保持这种精确性。

    const vanJS = Math.pow(1 + 0.05, 1/12);
    const decJS = Decimal.pow(1 + 0.05, 1/12).toPrecision(20);
    
    console.log({ vanJS, decJS });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/decimal.js/10.0.1/decimal.min.js"></script>
        3
  •  1
  •   César Ferreira    6 年前

    你应该经常使用 Math (官方来源的MDN)进行计算的库。你可以用 Pow(val, exponential) 对你有利。

    如果你有1/2,那么你可以说是2^(-1)。这样你就可以翻译 分开 给一个 指数

    Javascript在精度方面有一些问题,您将很难处理浮点。

    var amount  = (1 + 0.05) ^ (1/12);
    var amountPow = Math.pow(1 + 0.05, Math.pow(12,-1));
    console.log((1 + 0.05) ^ (1/12)); // Normal
    console.log(amountPow); // Exponential function Math