下面是我的简化代码
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。