根据另一个变量的小数位 (JAVA) 将双精度变量舍入为不同的十进制数字



下面是我的简化代码

public void compute{
Scanner scan = new Scanner(System.in);
double BUY=0;
double RATE, AMOUNT;
System.out.println("Enter Rate: ");
RATE = scan.nextDouble();
System.out.println("Enter Amount: ");
AMOUNT = scan.nextDouble();
BUY = (RATE*AMOUNT)+BUY;
}

基本上,我希望变量BUY四舍五入并具有与变量RATE相同的十进制数字,但RATE可以根据用户输入的内容具有不同的十进制数字,因此RATE的十进制数字需要不断变化

例如,用户输入

RATE = 52.38//有两个十进制数

AMOUNT = 45.53

如果我们执行BUY=(RATE*AMOUNT)+BUY

BUY将是BUY=2,384.8614//有4个十进制,但应该像RATE一样是2,并且知道double,它可能会显示大约15个十进制数字

如果用户想再试一次,输入

RATE = 65.879//有3位十进制数字

BUY也应该有3个十进制数字

如何使BUY适应RATE的十进制数

好吧,问题仍然不清楚,如果你想四舍五入或打印到小数点后十位的RATE。但是这里有一个解决方案,它将显示与RATE相同的位数:

Scanner scan = new Scanner(System.in);
double BUY = 0;
double RATE, AMOUNT;
System.out.println("Enter Rate: ");
RATE = scan.nextDouble();
int newScale=String.valueOf(RATE).split("[.]")[1].length(); //extract total number of digits

System.out.println("Enter Amount: ");
AMOUNT = scan.nextDouble();
BUY = (RATE * AMOUNT) + BUY;
System.out.println(BUY%2);
System.out.println(new 
BigDecimal(BUY).setScale(newScale,RoundingMode.HALF_EVEN)); // display BUY value with exactly same number of digits as that of RATE
BUY =  new BigDecimal(BUY).setScale(newScale,RoundingMode.HALF_EVEN).doubleValue();  // converting bigdecimal to double
System.out.println(BUY);  // printing double value.

这里,我从RATE&然后将其用作打印BUY值的刻度。

编辑:您可以使用.doubleValue();函数将上面代码中添加的bigdecimal转换为double。