Tag: 浮点

Float vs Double

是否存在两个浮点值之间的比较( equals() )如果将它们比较为DOUBLE则返回false但如果将它们作为FLOAT进行比较则返回true情况? 作为我的小组项目的一部分,我正在编写一些程序来比较任何给定类型的两个数值。 我必须处理4种类型: double , float , int和long 。 所以我想将double和float成一个函数,也就是说,我只是将任何float为double并进行比较。 这会导致任何不正确的结果吗? 谢谢。

这两种方法是否与Java中最小的Double值相当?

替代措辞 :何时将Double.MIN_VALUE添加到Java中的double 不会导致不同的Double值? (见Jon Skeet的评论如下) 这个关于Java中最小Double值的问题有一些答案在我看来是等价的。 Jon Skeet的回答无疑是有效的,但他的解释并没有让我相信它与理查德的 答案有什么不同。 Jon的回答使用以下内容: double d = // your existing value; long bits = Double.doubleToLongBits(d); bits++; d = Double.longBitsToDouble(); 理查兹回答提到了Double.MIN_VALUE的JavaDoc 保持double类型的最小正非零值的常量,2-1074。 它等于hex浮点字面值0x0.0000000000001P-1022,也等于Double.longBitsToDouble(0x1L) 。 我的问题是, Double.logBitsToDouble(0x1L)与Jon的bits++; Double.logBitsToDouble(0x1L)不同bits++; ? Jon的评论侧重于基本的浮点问题。 将Double.MIN_VALUE添加到double值和增加表示double的位模式之间存在差异。 由于存储浮点数的方式,它们是完全不同的操作。 如果您尝试将非常小的数字添加到一个非常大的数字,差异可能很小,以至于最接近的结果与原始数字相同。 但是,向当前位模式添加1将始终将相应的浮点值更改为在该比例下可见的最小可能值。 我没有看到Jon添加Double.MIN_VALUE增加长“bit ++”的方法有什么不同。 什么时候会产生不同的结果? 我编写了以下代码来测试差异。 也许有人可以提供更多/更好的样本双数或使用循环来找到存在差异的数字。 double d = 3.14159269123456789; // sample double long bits = Double.doubleToLongBits(d); long […]

Java 6 – 创建并检测Float.MAX_VALUE之上的第一个Double值

我想创建Double其值最接近但大于Float.MAX_VALUE 。 我刚刚写了一个与此类似的问题但是对于Double和Long.MAX_VALUE ,请看这里 。 如何使用标准Java 6 API重复Double和Float.MAX_VALUE的转换? 我的尝试在下面,但似乎不正确: Long longValue = Long.valueOf(Float.floatToIntBits(Float.MAX_VALUE)); Double value = Double.longBitsToDouble(Double.doubleToLongBits(longValue)+1); if (value Float.MAX_VALUE) { // Code here should execute but does not. } 真诚的谢谢。

如何准确判断double是否为整数?

特别是在Java中,如何确定double是否为整数? 为了澄清,我想知道如何确定double实际上不包含任何分数或小数。 我主要关注的是浮点数的性质。 我想到的方法(以及我通过Google找到的方法)基本遵循以下格式: double d = 1.0; if((int)d == d) { //do stuff } else { // … } 我当然不是浮点数和它们的行为方面的专家,但我的印象是因为double存储只是数字的近似值 , if()条件只会进入某些时间(甚至可能是大部分时间)。 但我正在寻找一种方法,无论double值如何存储在系统中,该方法都可以保证100%的工作时间。 这可能吗? 如果是这样,怎么样和为什么?

在android数据库中存储浮点数

我试图在android提供的sqlite数据库中存储美元金额,但它似乎无法正常工作。 仅当我尝试删除不是整数美元金额的交易时才会出现此错误。 即409.00将起作用,但410.44将不起作用。 如果我存储一个像410.44这样的值,然后在数据库中查询该数量,我就得不到匹配。 我试图将此字段用作REAL数据类型和TEXT数据类型,但都不起作用。 在以下示例中,getTransAmount()方法返回一个float。 这是我将db数据类型设置为REAL时运行的版本。 任何帮助,将不胜感激。 谢谢。 cv.put(transAmount, t.getTransAmount()); db.insert(tableName, null, cv); x = db.delete(tableName, transAmount + ” = ” + t.getTransAmount(), null);

在Java中将字符串转换为带有2个小数位的十进制数

在Java中,我试图将一串格式”###.##”解析为浮点数。 该字符串应始终具有2个小数位。 即使String的值为123.00 ,浮点数也应该是123.00 ,而不是123.0 。 这是我到目前为止: System.out.println(“string liters of petrol putting in preferences is ” + stringLitersOfPetrol); Float litersOfPetrol = Float.parseFloat(stringLitersOfPetrol); DecimalFormat df = new DecimalFormat(“0.00”); df.setMaximumFractionDigits(2); litersOfPetrol = Float.parseFloat(df.format(litersOfPetrol)); System.out.println(“liters of petrol before putting in editor: ” + litersOfPetrol); 它打印: string liters of petrol putting in preferences is 010.00 liters of petrol before […]

可以精确表示为浮点数/双精度的整数范围

什么是(连续的)整数的确切范围,可以表示为double(相应的浮点数?)我问的原因是因为我对这样的问题感到好奇,因为会发生精度损失。 那是 什么是最小正整数m ,使得m+1不能精确表示为double(相应的浮点数)? 什么是最大的负整数-n使得-n-1不能精确地表示为double(resp.lov)? (可能与上面相同)。 这意味着-n和m之间的每个整数都具有精确的浮点表示。 我基本上都在寻找浮点数和双打数的范围[-n, m] 。 让我们将范围限制为标准IEEE 754 32位和64位浮点表示。 我知道浮点数有24位精度,双精度数有53位(都带有隐藏的前导位),但由于浮点表示的复杂性,我正在寻找一个权威的答案。 请不要挥手! (理想的答案将certificate从0到m所有整数都是可表达的,并且m+1不是。)

java中’Float a = 3f’和’Float a = 3.0’有什么区别?

如果我表演 97346822*3f, result is 2.9204048E8, 然而 97346822*3.0 gives me 2.92040466E8. 请解释。

获取双变量中的数字的问题

我的java程序中需要一个函数,我遇到了一个小问题。 我想查看一个’double’变量的总位数。 (例如:5应该返回1,5.0034应该返回5,而2.04应该返回3.)我的function是这样的: private int getDoubleLength (double a) { int len = 0; while (a != (int) a) { a *= 10; } while (a > 1) { len ++; a/=10; } System.out.println(String.format(“Double %f has %d digits.”,a,len)); return len; } 现在这种方法很完美,但是当我进行一些数学计算时,你会得到双重的轻微错误:我将10除以cos(60),即0,5。 答案应该是20.0,但程序给出了20.000000000000004(这个数字,我复制了它)。 我的while循环卡住,程序挂起。 有任何想法吗? (或其他检查数字数字的好方法!)

Java中的0.0和-0.0(IEEE 754)

Java完全兼容IEEE 754吧? 但我对java如何决定浮点加法和减法的符号感到困惑。 这是我的测试结果: double a = -1.5; double b = 0.0; double c = -0.0; System.out.println(b * a); //-0.0 System.out.println(c * a); //0.0 System.out.println(b + b); //0.0 System.out.println(c + b); //0.0 System.out.println(b + c); //0.0 System.out.println(b – c); //0.0 System.out.println(c – b); //-0.0 System.out.println(c + c); //-0.0 我认为在乘法和除法中,符号的确定如下:符号(a)xor符号(b),但我想知道为什么0.0 + -0.0 = 0.0,Java如何决定加法和减法的符号? 它是在IEEE 754中描述的吗? […]