做java题,求任意三条边是否,是三角形,使用了double,float类型,结果输入1.1、2.2、3.3的时候,提示1.1+2.2>3.3
是不对的,因为double,float,会丢失精度,
解决方法:使用BigDecimal,但注意如下
1、不能使用传统上的+、-、*、/ 等算术运算符直接对其对象进行数学运算,
2、而必须调用其相对应的方法
package com.demo.test;
import java.math.BigDecimal;
import java.util.Scanner;
public class Test3 {
public static void main(String[] args) {
sJX();
}
//求三角形
public static void sJX() {
BigDecimal a;
BigDecimal b;
BigDecimal c;
Scanner sc=new Scanner(System.in);
System.out.println("请输入a边");
a=sc.nextBigDecimal();
System.out.println("请输入b边");
b=sc.nextBigDecimal();
System.out.println("请输入c边");
c=sc.nextBigDecimal();
//方法一
// if(a.doubleValue()<=0 || b.doubleValue()<=0 || c.doubleValue()<=0 ) {//BigDecimal切换成double作比较
// System.out.println("请输入正确的三边值");
// }else if((a.add(b)).compareTo(c)==-1 || (a.add(c)).compareTo(b)==-1 || (b.add(c)).compareTo(a)==-1 ){
// System.out.println("不是三角形");
// }else if((a.add(b)).compareTo(c)==0 || (a.add(c)).compareTo(b)==0 || (b.add(c)).compareTo(a)==0 ){
// System.out.println("不是三角形===");
// }else if((a.add(b)).compareTo(c)==1 || (a.add(c)).compareTo(b)==1 || (b.add(c)).compareTo(a)==1 ){
// System.out.println("是三角形");
// }
//方法二
if(a.doubleValue()<=0 || b.doubleValue()<=0 || c.doubleValue()<=0 ) {//BigDecimal切换成double作比较
System.out.println("请输入正确的三边值");
}else if((a.add(b)).doubleValue()<=c.doubleValue() || (a.add(c)).doubleValue()<=b.doubleValue() ||
(c.add(b)).doubleValue()<=a.doubleValue()){
System.out.println("不是三角形");
}else if((a.add(b)).doubleValue()>c.doubleValue() || (a.add(c)).doubleValue()>b.doubleValue() ||
(c.add(b)).doubleValue()>a.doubleValue()){
System.out.println("是三角形===");
}
}
}
参考:https://blog.youkuaiyun.com/cen_s/article/details/76472834
或者使用String转BigDecimal,
String a;
String b;
String c;
Scanner sc=new Scanner(System.in);
System.out.println("请输入a边");
a=sc.nextLine();
System.out.println("请输入b边");
b=sc.nextLine();
System.out.println("请输入c边");
c=sc.nextLine();
BigDecimal aa=new BigDecimal(a);
BigDecimal bb=new BigDecimal(b);
BigDecimal cc=new BigDecimal(c);
int x=a.compareTo(b);
// int y=(a.add(b)).compareTo(c);
//使用compareTo(),得到int值,
//x=-1,a<b; | //y=-1,a<b;
//x= 0,a=b; | //y= 0,a<b;
//x= 1,a>b; | //y= 1,a<b;