Tag: 精度

Java:d​​ouble vs float

在另一个Bruce Eckel练习中,我编写的代码采用了一种方法,并在另一个类中更改了值。 这是我的代码: class Big { float b; } public class PassObject { static void f(Letter y) { yc = ‘z’; } //end f() static void g(Big z) { zb = 2.2; } public static void main(String[] args ) { Big t = new Big(); tb = 5.6; System.out.println(“1: tb : ” + tb); g(x); […]

如何确定double的最大精度

我试图确定双精度的最大精度是多少。 在此链接中对已接受答案的注释中, 在Java中保留精度为double @PeterLawrey表示最大精度为15。 你怎么决定这个?

丢失精度从java BigDecimal转换为double

我正在使用完全基于双精度的应用程序,并且在一个将字符串解析为double的实用程序方法中遇到问题。 我找到了一个修复,使用BigDecimal进行转换解决了这个问题,但是当我将BigDecimal转换回double时又引发了另一个问题:我失去了几个精度。 例如: import java.math.BigDecimal; import java.text.DecimalFormat; public class test { public static void main(String [] args){ String num = “299792.457999999984”; BigDecimal val = new BigDecimal(num); System.out.println(“big decimal: ” + val.toString()); DecimalFormat nf = new DecimalFormat(“#.0000000000”); System.out.println(“double: “+val.doubleValue()); System.out.println(“double formatted: “+nf.format(val.doubleValue())); } } 这会产生以下输出: $ java test big decimal: 299792.457999999984 double: 299792.458 double formatted: 299792.4580000000 […]

Java中的半精度浮点

是否有可以在IEEE 754半精度数字上执行计算或者将它们转换为双精度和从双精度转换的Java库? 这些方法中的任何一种都是合适的: 将数字保持为半精度格式,并使用整数算术和位进行计算( MicroFloat用于单精度和双精度) 以单精度或双精度执行所有计算,转换为半精度进行传输(在这种情况下,我需要的是经过良好测试的转换函数。) 编辑 :转换需要100%准确 – 输入文件中有很多NaN,无穷大和次正规。 相关问题,但对于JavaScript: 在Javascript中解压缩半精度浮点数

Java精度损失

我有一个关注精度损失的问题 我的任务是将数字打印为字符串 int exponent = … int[] Mantissas = { 1, 2, 5 }; double dataStep = java.lang.Math.pow(10.0, exponent) * Mantissas[mantissaIndex]; … for (int i = 0; i < NSteps; i++) steps[i] = firstStep + i * dataStep; draw(steps); 例如,0.2 * 7 = 1.4000000000000001; 0.0000014 / 10 = 1.3999999999999998E -7- 怎么弄清楚这个问题? UPD :主要问题是字符串输出格式化。 我不打扰约0.00000001值的损失。 现在我把它解决为String.format(“%f”,value),但我认为这不是好方法

如何使用BigDecimal显示总是2个小数点的数字?

我使用BigDecimal来获得一些价格值。 需求是这样的,无论我们从数据库获取什么值,显示的值应该有2个小数点。 例如: 取值为1 – 应显示为1.00 取值为1.7823 – 应显示为1.78 我正在使用setScale(2, BigDecimal.ROUND_HALF_UP)但仍有一些地方,如果来自DB的数据是整数,则显示相同的!! 我的意思是如果DB的值为0,则仅显示为0。 我希望它显示为0.00 谢谢

如何解决java中的双精度问题

可能重复: Java浮动和双打,如何避免0.0 + 0.1 + … + 0.1 == 0.9000001? 如何在java android中克服双乘法的精度问题?请注意我将字符串值转换为double值。 例如:当我乘以两个双倍值时: double d1 = Double.valueOf(“0.3”).doubleValue() * Double.valueOf(“3”).doubleValue(); System.out.println(“Result of multiplication : “+d1); 我得到以下结果:0.8999999999999999 我得到的一些结果是。 0.6 * 3 = 1.7999999999999998; 0.2 * 0.2 = 0.04000000000000001; 等等 我希望得到以下结果,而不是上述结果。 0.3 * 3 = 0.9; 0.6 * 3 = 1.8; 0.2 * 0.2 = 0.04; 请记住,我不是要将它四舍五入到最接近的整数。

“新BigDecimal(13.3D)”导致不精确的“13.3000000000000007105 ..”?

Java的BigDecimal怎么会这么痛苦呢? Double d = 13.3D; BigDecimal bd1 = new BigDecimal(d); BigDecimal bd2 = new BigDecimal(String.valueOf(d)); System.out.println(“RESULT 1: “+bd1.toString()); System.out.println(“RESULT 2: “+bd2.toString()); RESULT 1: 13.300000000000000710542735760100185871124267578125 RESULT 2: 13.3 是否存在需要结果1的情况? 我知道Java 1.5改变了toString()方法,但这是预期的后果吗? 另外我意识到BigDecimal有doubleValue()等,但我正在使用的库有助于使用toString()而我无法改变:-( 干杯。

精度损失 – int – > float或double

我有一个我正在修改的考试题目,问题是4分。 “在java中,我们可以将int赋给double或float”。 这会丢失信息吗?为什么? 我已经说过,因为int通常具有固定的长度或大小 – 存储数据的精度是有限的,其中以浮点存储信息可能是无限的,基本上我们丢失信息因为这个 现在我有点粗略地说我是否在这里击中了正确的区域。 我确信它会失去精确度,但我无法完全理解为什么。 我能得到一些帮助吗?

Java中的浮点数的精度错误

我想知道在Java中修复精度错误的最佳方法是什么。 正如您在以下示例中所看到的,存在精度错误: class FloatTest { public static void main(String[] args) { Float number1 = 1.89f; for(int i = 11; i < 800; i*=2) { System.out.println("loop value: " + i); System.out.println(i*number1); System.out.println(""); } } } 显示的结果是: 循环值:11 20.789999 循环值:22 41.579998 循环值:44 83.159996 循环值:88 166.31999 循环值:176 332.63998 循环值:352 665.27997 循环值:704 1330.5599 此外,如果有人可以解释为什么它只从11开始并且每次都加倍。 我认为所有其他值(或至少其中许多值)显示正确的结果。 这样的问题让我头疼,我通常使用数字格式化程序或将它们放入String中。 编辑:正如人们提到的,我可以使用一个双,但在尝试之后,似乎1.89作为双倍时间792仍然输出错误(输出为1496.8799999999999)。 我想我会尝试其他解决方案,比如BigDecimal