Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编译为JavaScript选项,该选项使用十进制库而不是IEEE 754数学?_Javascript_Typescript_Decimal_Ieee 754 - Fatal编程技术网

编译为JavaScript选项,该选项使用十进制库而不是IEEE 754数学?

编译为JavaScript选项,该选项使用十进制库而不是IEEE 754数学?,javascript,typescript,decimal,ieee-754,Javascript,Typescript,Decimal,Ieee 754,在JavaScript中0.1+0.2=0.300000000004并解释了为什么是因为数学。我正在处理财务/会计领域的应用程序,希望找到一种方法使0.1+0.2=0.3 因此,我正在寻找一种解决方案,该解决方案可以使用类似于以下示例的代码,并使用Decimal类型注释(使用语法) 编译/宏扩展过程可以输出使用JavaScript十进制库的代码(例如),因此c=0.3而不是0.3000000000004 var a, b, c; a = new Decimal(0.1); b = new De

在JavaScript中
0.1+0.2=0.300000000004
并解释了为什么是因为数学。我正在处理财务/会计领域的应用程序,希望找到一种方法使
0.1+0.2=0.3

因此,我正在寻找一种解决方案,该解决方案可以使用类似于以下示例的代码,并使用Decimal类型注释(使用语法)

编译/宏扩展过程可以输出使用JavaScript十进制库的代码(例如),因此c=
0.3
而不是
0.3000000000004

var a, b, c;

a = new Decimal(0.1);
b = new Decimal(0.2);

c = a.plus(b);

Mozilla宏似乎支持“让您定义自己的运算符或覆盖内置运算符”的操作

问题:sweet.js是否可能出现这种行为?有没有类似的例子


TypeScript可传输源代码,以前使用TypeScript时曾询问过此概念:

问题:是否可以扩展TypeScript编译器以支持此用例?这是否适用于功能请求


此外,在一系列关于将ActionScript交叉编译为JavaScript的文章中,有一位作者总结说,出于一致性原因,他们希望“ActionScript和JavaScript中出现相同的错误结果”,但这并不意味着需要额外的类型注释

问题:是否有其他策略或编译为JavaScript选项来实现此目标

现在有没有编译成JavaScript的解决方案可以做到这一点

值得一提的是,google的Dart支持运算符重写,并且具有可选的类型注释:

运算符重写:
可选类型:

或者,您可以使用单独的数学库完成所有数学运算。例如,表达式解析器附带并支持bignumbers(由以下各项提供支持):


我不知道这对你的应用程序来说是否可行和方便,但至少可以让你用“可读”的表达式来写你的方程式。

不明白为什么这会被选为离题题,所以编辑后的问题会更明确?开放编辑建议您没有考虑明确使用
decimal.js
var a, b, c;

a = new Decimal(0.1);
b = new Decimal(0.2);

c = a.plus(b);
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