Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 给出奇数答案的代码中的计算,小数点后有许多数字_Java_Eclipse_Java.util.scanner - Fatal编程技术网

Java 给出奇数答案的代码中的计算,小数点后有许多数字

Java 给出奇数答案的代码中的计算,小数点后有许多数字,java,eclipse,java.util.scanner,Java,Eclipse,Java.util.scanner,对于一个家庭作业问题,我的任务是用java(使用Eclipse)制作一个应用程序来计算欧元对美元、英镑和里拉的价值。英镑和里拉可以很好地工作,但无论出于什么原因,在转换欧元时,它都会导致在某些数字的小数点后出现很多数字(例如50) 代码在几个地方都是荷兰语的,但总体轮廓应该清楚 我已经和我的老师谈过了,但即使是他也不能帮我回答 import java.util.Scanner; public class Tests { public static void main(String[] a

对于一个家庭作业问题,我的任务是用java(使用Eclipse)制作一个应用程序来计算欧元对美元、英镑和里拉的价值。英镑和里拉可以很好地工作,但无论出于什么原因,在转换欧元时,它都会导致在某些数字的小数点后出现很多数字(例如50) 代码在几个地方都是荷兰语的,但总体轮廓应该清楚

我已经和我的老师谈过了,但即使是他也不能帮我回答

import java.util.Scanner;
public class Tests
{
    public static void main(String[] args)
    {
        int keuze;
        double bedrag;
        double factord=1.1;
        double factorp=0.87;
        double factorl=5.38;
        Scanner c = new Scanner(System.in);
        System.out.print("Kies uw valuta: \n 1    -    Amerikaanse 
Dollar\n 2    -    Engelse Pond\n 3    -    Turkse Lira\n");
        keuze = c.nextInt();
        if(keuze == 1)
        {
            System.out.print("Voer het gewenste bedrag in euro's: ");

            bedrag = c.nextDouble();
            System.out.println( bedrag * factord + " Dollar");
        }

输入数字(例如)20时,我的预期结果是22(因为系数是1.1)。这不会引起任何问题,但是(例如)输入50,结果是55.00000000000001。

这取决于您希望在输出中显示的位置。你必须根据你的需要格式化这些文件。下面的代码使用DecimalFormat执行这些操作

import java.math.RoundingMode;
import java.text.DecimalFormat;

public class DecimalExample {

    private static DecimalFormat df2 = new DecimalFormat("#.##");

    public static void main(String[] args) {

        double input = 3.14159265359;
        System.out.println("double : " + input);
        System.out.println("double : " + df2.format(input));    //3.14

        // DecimalFormat, default is RoundingMode.HALF_EVEN
        df2.setRoundingMode(RoundingMode.DOWN);
        System.out.println("\ndouble : " + df2.format(input));  //3.14

        df2.setRoundingMode(RoundingMode.UP);
        System.out.println("double : " + df2.format(input));    //3.15

    }
输出

double : 3.14159265359
double : 3.14
double : 3.14
double : 3.15
你应使用:

输出:

Voer het gewenste bedrag in euro's: 50
55.00 Dollar

请看:

由于内部精度问题,并非所有值都可以用双精度或“浮点数”表示。这就是为什么在使用这些近似数字时有时会看到它们。我建议使用BigDecimal,这样您可以选择要使用的小数位数。Jan发布的链接是关于“为什么”问题的优秀阅读!已经(重复?):看一看,关于舍入错误的第一段中有一段写道:“将无限多个实数压缩成有限的位数需要一个近似表示。”尽管BigDecimal似乎是货币的一种方式,但给出了相关问题的答案,我喜欢专注于确定特定应用程序所需的精度,并考虑权衡。
Voer het gewenste bedrag in euro's: 50
55.00 Dollar