Tag: 浮点

奇怪的浮动除法结果

我发生在grails项目中的这个奇怪的除法错误中(但我认为grails与它没什么关系,我认为这是一个常规或java问题): 如果在groovy控制台中我运行它 float money = -1.30 float r = 0.01 println ((money/r).class.name) println ((money/r).floatValue()) println ((money/r).toString() ) 我得到了这个输出 java.lang.Double -130.0 -129.99999813735482 groovy中的float分区给了我一个Double,这是正确的,但为什么Double toString()给我一个如此奇怪的值“-129.99999813735482”而不是正确的“-130.0”?

java双精度

可能重复: 浮点精度 double a=0.000001,b=50000; b=a*b; System.out.println(“double:”+b); // -> double:0.049999999999999996 float a=0.000001f,b=50000; b=a*b; System.out.println(“float”+b); // -> float0.05 我在代码的大部分时间里使用了double,今天我发现了这个问题。 我该怎么处理? 语境: double []refValues= {100,75,50,25,15,5,1}; double bInMilliGram=b*1000; double pickedVal=0; for(double ref:refValues) if(ref<=bInMilliGram) { pickedVal=ref; break; } System.out.println("bInMilliGram:"+bInMilliGram+", pickedVal:"+pickedVal); o / p: – > bInMilliGram:49.99999999999999,pickedVal:25.0

Java浮点数学 – (转换为英尺/米)

我认为非常基本的问题 – 我正在执行此function: private double convertMetersToFeet(double meters) { //function converts Feet to Meters. double toFeet = meters; toFeet = meters*3.2808; // official conversion rate of Meters to Feet return toFeet; } 问题是输出; 例如,我从101的输入得到337.36080000000004。截断浮点的适当做法是什么? 如下面的答案所假设,我希望4个有效数字与我的转换率保持一致。

浮点字面值中“0”作为前缀的含义是什么?

使用“0”(零)作为整数文字中的前缀会将其基数更改为八进制。 这就是为什么 System.out.println(010); 将打印8 。 但是使用“F”作为后缀 System.out.println(010F); 将使它浮动失去八进制基数(返回到十进制)并将打印10.0 。 010F和10F之间有什么区别吗? 使用浮动时,“0”前缀是否有任何意义?

如何获得架构支持的最小的下一个或上一个可能的double值?

可以说我有一个double变量d 。 有没有办法获得CPU架构支持的下一个或上一个值。 作为一个简单的例子,如果值为10.1245125并且架构的精度固定为7位小数,那么下一个值将是10.1245126,之前的值将是10.1245124。 显然,在浮点架构上,这并不是那么简单。 我怎样才能实现这个目标(用Java)?

浮点加法 – 给出奇怪的结果..!

执行以下代码时: public class FPoint { public static void main(String[] args) { float f = 0.1f; for(int i = 0; i<9; i++) { f += 0.1f; } System.out.println(f); } } 将显示以下输出: 1.0000001 但输出应该是1.0000000 ,对吗? 如我错了请纠正我..!!

从字符串精确分配给Float

我有以下代码,我想为float指定一个十进制值而不会丢失精度。 String s1= “525.880005”; Float f = new Float(s1); System.out.println(f); 产量: 5.88 预期产出: 525.880005

为什么JSP / JSTL除以1000有时会给出余数?

除以1000我有时遇到一个没有“正确”划分的错误。 例如,当将90.55除以1000而不是获得.09055时,我得到.090549999999。 为什么会这样? 这是浮点数学的结果吗? 谷歌搜索似乎表明这可能是罪魁祸首,但我没有找到具体的答案。 为了解决这个问题,我可以将答案四舍五入,但似乎这只是一个更深层问题的补丁。

如何将浮点数转换为由字节分子和分母表示的最接近的分数?

如何编写一个给定浮点数的算法,并尝试使用分子和分母尽可能准确地表示,两者都限制在Java字节的范围内? 这样做的原因是I2C设备需要分子和分母,而给它一个浮点数是有意义的。 例如, 3.1415926535…将导致245/78 ,而不是314/100或22/7 。 在效率方面,这将在程序开始时调用三次,但之后根本不会。 所以慢速算法也不算太糟糕。

如何在需要使用float时实际避免浮点错误?

我试图使用一些UI按钮来影响3D模型的转换,以将位置移动0.1或-0.1。 我的模型位置是一个三维浮点数,因此只需将0.1f添加到其中一个值就会导致明显的舍入误差。 虽然我可以使用像BigDecimal这样的东西来保持精度,但我仍然必须将它从浮点数转换回到最后的浮点数,它总是会导致愚蠢的数字使我的UI看起来像一团糟。 我可以很好地显示显示的值,但是舍入错误只会随着更多编辑而变得更糟,并且它们使我的保存文件难以阅读。 那么当我需要使用浮点数时,如何才能真正避免这些错误呢?