Tag: 浮点

Java中的计算问题

我在Java中执行计算时遇到了一些困难。 这是我想要做的 – ((0.053800 * (500000/1000)) + 4) * 0.85 在我的java应用程序中,它返回26.264999999999997,如果你向上舍入到2位小数,则变为26.26。 但在MS Excel中,相同的公式返回26.265000 ..因此舍入结果为26.27。 如果我的Java应用程序返回的值不正确,我该怎么做才能纠正它?

你能否将浮点值精确地与零进行比较?

我知道我们无法使用==来比较2个浮点值。 我们只能比较它们是否在彼此的某个区间内。 我知道 if(val == 0.512) 由于浮点计算和转换为二进制所固有的错误而错误,应该是错误的 if (val in (0.512-epsilon, 0.512+epsilon)) 但是0特别吗? 我们可以将浮点数精确地比较为0吗? 甚至那是不正确的? 特别是在C#和Java的上下文中? double val = 0; val = getVal(); if(val == 0)

如何将字符串转换为float并避免在java中使用try / catch?

有一些情况我需要将字符串转换为浮点数或其他一些数值数据类型,但有可能获得一些不可转换的值,如“ – ”或“/”,我无法预先validation所有值以删除他们。 我想避免使用try / catch这个问题,还有其他方法在java中进行正确的转换吗? 类似于C# TryParse东西?

其他NaN值是多少?

java.lang.Double.NaN的文档说它是 保持double类型的Not-a-Number(NaN)值的常量。 它等效于Double.longBitsToDouble(0x7ff8000000000000L)返回的Double.longBitsToDouble(0x7ff8000000000000L) 。 这似乎暗示还有其他人。 如果是这样,我如何抓住它们,这可以移植吗? 要清楚,我想找到double值x这样的 Double.doubleToRawLongBits(x) != Double.doubleToRawLongBits(Double.NaN) 和 Double.isNaN(x) 都是真的。

使用java在float值中丢失精度

给出下面的测试代码及其输出。 当我从数值获得浮点值时,精度会丢失。任何人都可以告诉我为什么会出现这种行为以及如何处理这个问题? public static void main(String[] args) { try { java.lang.Number numberVal = 676543.21; float floatVal = numberVal.floatValue(); System.out.println(“Number value : ” + numberVal); System.out.println(“float value : ” + floatVal); System.out.println(“Float.MAX_VALUE : ” + Float.MAX_VALUE); System.out.println(“Is floatVal > Float.MAX_VALUE ? ” + ( floatVal > Float.MAX_VALUE)); }catch(Exception e) { e.printStackTrace(); } } 输出: Number value […]

Java:如何将二进制值的字符串转换为Float,反之亦然?

如何将12345.12346f的浮点值转换为二进制值的字符串,即“0011010101010101”,反之亦然?

为什么0.1表示正确浮点数? (我知道为什么不在2.0-1.9的结果)

我最近读了很多关于浮点表示的内容(包括: 如何在浮点运算和十进制中表示0.1 )。 现在我明白0.1无法正确表示,当我这样做时: System.out.println(2.0f – 1.9f); 我永远不会得到准确的结果。 所以问题是:如何在以下代码中表示0.1f以正确打印0.1? 那是某种合成糖吗? 在我上面提到的文章中说:0.1在内存中表示为0.100000001490116119384765625。 那么为什么我没有获得此代码的输出: System.out.println(0.1f); Java如何处理这个问题?

在Java中防止String.format(“%。2f”,doubleValue)中的舍入

如何阻止String.format(“%.2f”, doubleValue); 从四舍五入(圆半算法)而不是截断它? 例如 doubleValue = 123.459 格式化后, doubleValue = 123.46 我只想丢弃最后一位数, 123.45 我知道还有其他方法可以做到这一点,我只是想知道使用String.format是否可行。

为什么Java BigDecimal会返回1E + 1?

为什么此代码有时会返回1E + 1,而对于其他输入(例如17),输出不会以科学计数法打印? BigDecimal bigDecimal = BigDecimal.valueOf(doubleValue).multiply(BigDecimal.valueOf(100d)).stripTrailingZeros(); System.out.println(“value: ” + bigDecimal);

为什么在Java float比较中使用Float.floatToIntBits()?

在JBox2d中, Vec2.equals()存在以下代码: @Override public boolean equals(Object obj) { //automatically generated by Eclipse if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Vec2 other = (Vec2) obj; if (Float.floatToIntBits(x) != Float.floatToIntBits(other.x)) return false; if (Float.floatToIntBits(y) != Float.floatToIntBits(other.y)) return false; return true; } 我想知道float int位转换函数的用途是什么,这里。 这是否提供了解决Java浮点数比较不准确问题的方法(如果可能的话)? 还是完全不同的东西? 我想知道它是否是epsilon方法的替代方案: […]