将字符串转换为float - java vs javascript

时间:2017-11-23 08:49:31

标签: javascript java floating-point precision

我正在尝试正确地将一个字符串转换(解析)为java中的float,数字为5755.1115,例如:

float fl = new BigDecimal("5755.1115").floatValue();
float fl = (float)5755.1115d;

问题在于它始终打印5755.1113。它似乎失去了精确度(我也试过使用MathcContext(10),但没有工作)

但是如果我在javascript中尝试这个,它似乎正在工作:

var fl = parseFloat('5755.1115');
var str = "" + fl.toPrecision(8);
console.log("number: " + str);

即使我不使用toPrecision()函数,也能正确打印数字。

任何人都可以解释我如何在Java中实现这一目标?

编辑: 我的错误,我忘了指定我不想使用double,因为我需要保持最小的数据传输。

2 个答案:

答案 0 :(得分:3)

JavaScript只知道双打。 在JavaScript double上调用toPrecision(8)不会改变它。

[不仅仅是在Java中],浮点数不足以准确存储5755.1115。

  

任何人都可以解释我如何在Java中实现这一目标?

如果您需要额外的精度,请使用double而不是float。

答案 1 :(得分:2)

对于java方面:这里

float fl = new BigDecimal("5755.1115").floatValue(); 

基本上是毫无意义。首先创建一个BigDecimal对象(允许任意精度) - 然后将该精确表示转换为更精确的"不太精确的"浮动值。你也可以写

float fl = 5755.1115f;

代替。你想要花费额外的费用来确保"精确的" BigDecimal - 或者您对普通的Java浮点浮点语义感到满意。但是像你所说的那样把这两个概念混合在一起就是说:毫无意义。