我目前使用的是小数点,但Javascript似乎一直在舍入。
例如,下面是我需要做的计算之一:
(1 + 0.05) ^ (1/12)
这应该返回1.0040741237836483016054196026721,但是我得到的只有1。
我尝试过使用Big.js库,但它仍然只返回1,我需要那些小数点才能得到一个准确的结果,有办法指定我想要的小数位数吗?
发布于 2018-08-03 14:28:37
^符号在javascript中具有位XOR语义。见这里。
下面的代码片段显示了如何获得正确的结果:
console.log(`(1 + 0.05) ^ (1/12) = ${Math.pow((1 + 0.05), (1/12))}`);
发布于 2018-08-03 14:34:28
正如在另一个答案中所指出的,您可以使用普通的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>
发布于 2018-08-03 14:37:19
您应该始终使用数学 (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
https://stackoverflow.com/questions/51674661
复制相似问题