将 Excel 公式转换为 Javascript

Convert Excel Formula to Javascript

本文关键字:Javascript 转换 Excel      更新时间:2023-09-26

我在 excel 上有这个公式

=(1130000000000*F11^1.85)/(F19^1.85*(F13*(1-2/F15))^4.8655)

什么时候

F11 = q
F19 = 150 (Constant)
F13 = d
F15 = sdr

我把它转换成这个

Math.round((1130000000000*Math.pow(q,1.85))/(Math.pow(150,1.85)*Math.pow(d*(1-2/sdr)),4.8655))

但结果是错误的

什么时候

q = 120
d = 200
sdr = 17

结果应该是8.76但我得到长数字

有什么帮助吗?谢谢

来自 YUI 博客

JavaScript 只有一个数字类型:IEEE 754 Double Precision 浮点数。拥有单一的数字类型是 JavaScript 的最佳功能之一。多种数字类型可能是复杂性、混乱和错误的根源。单一类型正在简化和稳定。 不幸的是,二进制浮点类型有一些明显的缺点。最糟糕的是它不能准确地表示小数,这是一个大问题,因为人类长期以来一直在用小数进行商业交易。切换到基于二进制的数字系统会有好处,但这不会发生。因此,0.1 + 0.2 === 0.3 是假的,这是很多混乱的根源。

http://www.yuiblog.com/blog/2009/03/10/when-you-cant-count-on-your-numbers/

完全忽略我之前的回答,尽管如果您继续使用这些大数字,您肯定会遇到问题,但您的实际问题是代码中放错了括号。如果您使用它(只需将变量名称替换为值):

Math.round((1130000000000*Math.pow(120,1.85))/(Math.pow(150,1.85)*Math.pow((200*(1-2/17)),4.8655)))

它返回 9(四舍五入的 8.76),您放错位置的括号位于1-2标记附近。

为了将来的参考,Javascript可以理解的最大数字是+/- 9007199254740992。

引用:

一个数字在不损失精度的情况下可以达到的 JavaScript 的最高整数值是多少?

ECMA-262 - 数字类型