javascript中双精度和浮点精度之间的转换

javascript中双精度和浮点精度之间的转换,javascript,floating-point,ieee-754,Javascript,Floating Point,Ieee 754,如何将数字从双精度转换为单精度,然后再转换回来 例如,我在Java/C/C#中有这样的代码: (不要问。这是一些毛茸茸的C代码的简化版本,我需要将其移植为1:1) 另一个例子: double y = Math.floor((double)(float)5.999999876); // should be 6.0 我已经尝试过的: var f:float = x; // syntax error var f = x as float; // syntax error var f = parse

如何将数字从双精度转换为单精度,然后再转换回来

例如,我在Java/C/C#中有这样的代码:

(不要问。这是一些毛茸茸的C代码的简化版本,我需要将其移植为1:1)

另一个例子:

double y = Math.floor((double)(float)5.999999876); // should be 6.0

我已经尝试过的:

var f:float = x; // syntax error
var f = x as float; // syntax error
var f = parseFloat(x); // returns full double-precision (0.0000100000000000000008180305391403)
var f = toFixed(x, ...); // Can't use this as float is not defined by number of decimal places but number of binary places.

我正在使用Rhino(作为Java7的一部分),它还应该与Nashorn(作为Java8的一部分)兼容。如果这有帮助的话,我可以访问整个公共JavaAPI



[编辑]我做了更多的实验,似乎问题不在于浮点转换,而在于浮点操作。我真的需要处理器中的FPU在这里执行单精度
fmul
<如果
f
在双精度数字中包含
0.00001
的浮点精度版本,则code>1001*f不起作用。获得精确结果的唯一方法是对
1001f*0.00001f
执行32位乘法,然后获得结果。

JavaScript中的所有数值都是
Number
s 它们都是64位浮点数


JavaScript本身不提供任何此类功能。如果绝对需要精度转换,我建议您使用。

这将在javascript中将数字转换为浮点:

new Float32Array([15.603179021718429])[0]
答案是:

15.603178977966309

更简单的是,使用
Math.fround()
。ES6中的新功能。

Javascript只有一个。我知道它有一个
Number
类型,但仍然有
floor()
这样的函数,可以有效地使它成为int(但不是真的)。您确实需要澄清这是关于Java还是Javascript。。。你似乎在交替使用这两个术语,但它们不是一回事。我认为Math.floor()是一个误导性的例子,因为你希望它能转换精度(
4.2->4
),而实际上它不能(
4.20000->4.00001
).我知道你的意思,在它变得更加混乱之前:你所寻找的不是语言的一部分。但是你可以通过我在回答中提到的库来实现这一点。它允许你进行精度转换,这不是答案
0.00000999999747378752也可以用64位双精度表示,所以问题是当我有
0.0000010000000000000081805391403403
时,如何获取该数字?
15.603178977966309