[英]Round off a double variable to different decimal digits depending on another variable's decimal place (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 //有 2 个十进制数字
金额 = 45.53
如果我们做 BUY=(RATE*AMOUNT)+BUY
BUY 将是 BUY=2,384.8614 //有 4 个小数,但应该是 2,如 RATE,并且知道双精度,它可能会显示大约 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 的函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.