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