Tag: double

一般编程和Java的双精度

据我所知,由于float / double的性质,不应该使用它们进行精确的重要计算。 然而,由于类似问题的混合答案,我对它们的局限性感到有些困惑,无论浮点数和双打是否总是不准确,无论有效数字是多少,或者只是不准确到第16位数。 我在Java中运行了一些例子, System.out.println(Double.parseDouble(“999999.9999999999”); // this outputs correctly w/ 16 digits System.out.println(Double.parseDouble(“9.99999999999999”); // This also outputs correctly w/ 15 digits System.out.println(Double.parseDouble(“9.999999999999999”); // But this doesn’t output correctly w/ 16 digits. Outputs 9.999999999999998 我找不到另一个答案的链接,该答案表明像1.98和2.02这样的值会向下舍入到2.0,因此会产生不准确,但测试显示值正确打印。 所以我的第一个问题是浮点/双值是否总是不准确,或者是否存在可以确保精度的下限。 我的第二个问题是关于使用BigDecimal。 我知道我应该使用BigDecimal进行精确的重要计算。 因此我应该使用BigDecimal的算法进行算术和比较。 但是,BigDecimal还包含一个doubleValue()方法,它将BigDecimal转换为double。 我可以安全地对双值进行比较,我知道它确实少于16位数吗? 根本不会对它们进行算术运算,因此固有值不应该改变。 例如,我可以安全地执行以下操作吗? BigDecimal myDecimal = new BigDecimal(“123.456”); BigDecimal myDecimal2 = new BigDecimal(“234.567”); if (myDecimal.doubleValue() […]

计算java中两个双精度的余数

我有以下代码: Double x = 17.0; Double y = 0.1; double remainder = x.doubleValue() % y.doubleValue(); 当我运行这个时,我得到余数= 0.09999999999999906 知道为什么?? 我基本上需要检查x是否可被y完全整除。 你能在java中建议其他方法吗? 谢谢

不可预知的双重

可能重复: .NET上的双精度问题 双重计算产生奇数结果 我知道双值0.2内部represantation类似于0.199999 。 但是下面的代码仍然让我感到困惑。 码: public static void main(String[] args) { double d= 0.3d; double f= 0.1d; System.out.println(d+f); System.out.println(d*f); System.out.println(d); System.out.println(f); System.out.println(df); System.out.println(d/f); System.out.println((df)*(df)); } OUTPUT: 0.4 0.03 0.3 0.1 0.19999999999999998 2.9999999999999996 0.039999999999999994 实际上发生了什么? 加法,乘法顺利,但减法,除法不是。 任何人都可以详细说明为什么加法与减法不同 ?

将二维2D数组转换为BufferedImage

我有一个二维的双打数组,它是图像的滤波值。 我想将此数组转换回BufferedImage 。 如何将double[][]转换为BufferedImage ? BufferedImage b = new BufferedImage(arr.length, arr[0].length, 3); Graphics c = b.getGraphics(); PrintWriter writer = new PrintWriter(“the-file-name.txt”, “UTF-8”); for(int i=0; i< arr.length; i++){ for (int j=0; j<arr[0].length; j++){ c.drawString(String.valueOf(arr[i][j]), i, j); writer.print(arr[i][j]+" \t"); } writer.println(); } ImageIO.write(b, "jpg", new File("CustomImage.jpg")); System.out.println("end"); 当我使用imshow在matlab中绘制文件名.txt时,我可以看到我的过滤图像。 但是CustomImage.jpg只包含一种颜色。 知道为什么吗? 结果与c.drawString(String.valueOf(arr [i] [j]),i,j): c.drawString(String.valueOf(arr [i] [j]),0 +(i […]

在Java中没有转换的两到长

我需要将double转换为long保留其二进制结构,而不是数值。 只需更改类型,但保留二进制值。 有原生方式吗?

为什么(长)9223372036854665200d给我9223372036854665216?

我知道有精确错误的怪异东西,但我无法理解, 为什么(long)9223372036854665200d给我9223372036854665216 ?

为什么Double.parseDouble使9999999999999999变为10000000000000000?

为什么Double.parseDouble使9999999999999999变为10000000000000000 ? 例如 : Double d =Double.parseDouble(“9999999999999999”); String b= new DecimalFormat(“#.##”).format(d); System.out.println(b); IS打印 10000000000000000 相反,它必须显示9999999999999999或9999999999999999.00 非常感谢任何forms的帮助。

如何检查用户输入的数据类型有效性(Java Scanner类)

我试图创建一个简单的UI,要求用户输入双类型数字,如果他们的输入不是双重类型,程序应该保持打印提示,直到用户输入有效的双重类型。 我的下面的代码还没有完全正常工作,因为当用户键入有效的double类型时,除非用户键入另一个double类型号,否则程序不会执行任何操作。 我想while循环中的条件(sc.hasNextDouble())会消耗第一个有效输入。 怎么纠正这个? 非常感谢 Scanner sc = new Scanner(System.in); System.out.println(“Type a double-type number:”); while (!sc.hasNextDouble()) { System.out.println(“Invalid input\n Type the double-type number:”); sc.next(); } userInput = sc.nextDouble(); // need to check the data type?

在Java中将int数组的内容复制到double数组?

我正在尝试将我的int数组的内容复制到double类型的数组中。 我必须先把它们抛出来吗? 我成功地将int类型的数组复制到另一个int类型的数组中。 但是现在我想编写将内容从Array A复制到Array Y (int到double)的代码。 这是我的代码: public class CopyingArraysEtc { public void copyArrayAtoB() { double[] x = {10.1,33,21,9},y = null; int[] a = {23,31,11,9}, b = new int[4], c; System.arraycopy(a, 0, b, 0, a.length); for (int i = 0; i < b.length; i++) { System.out.println(b[i]); } } public static void main(String[] args) { […]

如何限制双打印的小数位数?

这个程序有效,除非nJars的数量是7的倍数,我会得到一个答案,如$ 14.999999999999998。 对于6,输出为14.08。 如何修复7的倍数的exception,这样它会显示14.99美元? import java.util.Scanner; public class Homework_17 { private static int nJars, nCartons, totalOunces, OuncesTolbs, lbs; public static void main(String[] args) { computeShippingCost(); } public static void computeShippingCost() { System.out.print(“Enter a number of jars: “); Scanner kboard = new Scanner (System.in); nJars = kboard.nextInt(); int nCartons = (nJars + 11) / 12; int […]