编译为JavaScript选项,该选项使用十进制库而不是IEEE 754数学
Compile-to-JavaScript option that uses a Decimal library instead of IEEE 754 math?
在JavaScript中0.1 + 0.2 = 0.30000000000000004
和浮点数学坏了吗?解释了为什么因为IEEE 754数学。我正在处理财务/会计领域的应用程序,希望有一种方法来制作0.1 + 0.2 = 0.3
因此,我正在寻找一种解决方案,它可以使用类似于下面示例的代码,并为Decimal添加类型注释(使用TypeScript语法)。
var a:Decimal, b:Decimal, c:Decimal;
a = 0.1;
b = 0.2;
c = a + b;
编译/宏扩展过程可以输出使用JavaScript Decimal库(例如Decimal.js)的代码,因此c=0.3
而不是0.30000000000000004
var a, b, c;
a = new Decimal(0.1);
b = new Decimal(0.2);
c = a.plus(b);
Mozilla sweet.js宏似乎支持自定义运算符,这些运算符"允许您定义自己的运算符或覆盖内置运算符"。
问题:这种行为在sweet.js中可能发生吗?有类似的例子吗?
TypeScript可转换源代码,这个概念以前曾被问及TypeScript:
- 在TypeScript中实现运算符重载
- 建议:int类型#195
问题:TypeScript编译器是否可以扩展以支持此用例?这是否适合功能请求?
此外,一篇关于将ActionScript交叉编译为JavaScript的系列博客文章得出结论,出于一致性原因,他们希望"ActionScript和JavaScript中出现相同的错误结果",但这并没有假设额外的类型注释。
问题:是否有其他策略或编译为JavaScript选项来实现此目标?
现在有没有一个编译到JavaScript的解决方案可以做到这一点
值得一提的是,谷歌的Dart确实支持运算符重写,并且有可选的类型注释:https://www.dartlang.org/
操作员超控:https://www.dartlang.org/articles/idiomatic-dart/#operators可选类型:https://www.dartlang.org/articles/optional-types/
或者,您可以使用一个单独的数学库来完成所有的数学运算。例如,math.js附带了一个表达式解析器,并支持bignumbers(由decimal.js提供支持):
math.config({number: 'bignumber'});
// using a parser to manage variables for you in an internal scope:
var parser = math.parser();
parser.eval('a = 0.1'); // BigNumber, 0.1
parser.eval('b = 0.2'); // BigNumber, 0.2
parser.eval('c = a + b'); // BigNumber, 0.3
// or without a parser:
var scope = {};
math.eval('a = 0.1', scope); // BigNumber, 0.1
math.eval('b = 0.2', scope); // BigNumber, 0.2
math.eval('c = a + b', scope); // BigNumber, 0.3
// scope now contains properties a, b, and c
我不知道这对你的应用程序来说是否可行和方便,但至少可以让你用"可读"的表达式来写方程。
- 我的单元测试选项是什么
- 如何更改bigquery API中的计费层选项
- 使用Javascript获取所选选项ID
- Selectize.js:如何对整数值的选项进行排序
- 通过js在新选项卡中有条件地打开url
- 按照选项卡索引的顺序循环一个jQuery选择
- 如何在使用selectBoxIt JQuery插件时检测选项更改
- 无法在Ionic select中预先选择最后一个选项
- 如何在选项卡上定义属性'的主窗口对象
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 使用此选项选择父类内部的类
- CKeditor:更改对话框中的默认选择选项
- JQuery覆盖不更改单选选项
- 活动选项卡's源代码-获取变量s值
- 绑定时将Parsley minlength消息作为选项传递时,未对其进行自定义
- 如何从选择框中的选项中获取属性值
- 如何在从多选下拉列表中选择选项值时动态生成文本框
- React Native通过Navigator将用户输入数据传递到选项卡栏IOS中的组件
- 如何从外部页面激活非默认引导选项卡
- 编译为JavaScript选项,该选项使用十进制库而不是IEEE 754数学