我想出了代码的主要部分,但我无法弄清楚如何获取代码,因此它只能读取用户输入的多少小数点之间的差异。那么我将如何获取用户输入(将输入第三个数字)并找出前两个数字是否等于该小数点。该程序的目标是检查这两个数字是否等于n(用户输入的数字)有效数字。
示例输入: 5.124 5.125 2
示例输出: 差值= .001,数字等于2位小数
import java.util.Scanner;
public class Equal {
public static void main(String[] args) {
Scanner input = new Scanner( System.in );
String diff="diffrence =";
double num1;
double num2;
double num3;
double calc;
while(input.hasNext()){
num1 = Double.parseDouble(input.next());
num2 = Double.parseDouble(input.next());
num3 = Double.parseDouble(input.next());
calc = Math.abs(num1-num2);
System.out.printf("%s %.10f", diff, calc);
}
}
}
答案 0 :(得分:0)
使用BigDecimal
的好方法:
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.util.Scanner;
public class Equal {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String num1;
String num2;
int num3;
while (input.hasNext()) {
// First number
num1 = input.next();
// Second number
num2 = input.next();
// Number of significant figures
num3 = Integer.parseInt(input.next());
MathContext mc = new MathContext(num3, RoundingMode.HALF_UP);
BigDecimal bdNum1 = new BigDecimal(num1, mc);
BigDecimal bdNum2 = new BigDecimal(num2, mc);
System.out.println(bdNum1.equals(bdNum2));
}
input.close();
}
}
根据您的具体需求,您可能想要使用RoundingMode
。
示例输入:
1.2345678
1.2345679
7
示例输出:
true
示例输入:
0.123
0.124
3
示例输出:
false
请注意,在特殊情况下,行为可能与预期不符,如:
输入:
0.10000
0.1000
8
输出:
false
答案 1 :(得分:0)
以下是普通双打的示例和junit测试用例。希望这会有所帮助。
public boolean doublesSameNumberOfDecimalPlaces(double x,double y,int numberOfDecimals){
x = (long)(x * Math.pow(10, numberOfDecimals));
y = (long)(y * Math.pow(10, numberOfDecimals));
return x==y;
}
@Test
public void TestDoublesSameNumberOfDecimalPlaces(){
double x = 3.141593;
double y = 3.14159265359;
assertTrue(doublesSameNumberOfDecimalPlaces(x,y,0));
assertTrue(doublesSameNumberOfDecimalPlaces(x,y,1));
assertTrue(doublesSameNumberOfDecimalPlaces(x,y,2));
assertTrue(doublesSameNumberOfDecimalPlaces(x,y,3));
assertTrue(doublesSameNumberOfDecimalPlaces(x,y,4));
assertTrue(doublesSameNumberOfDecimalPlaces(x,y,5));
assertFalse(doublesSameNumberOfDecimalPlaces(x,y,6));
}