繁体   English   中英

根据另一个变量的小数位(JAVA)将双变量四舍五入为不同的小数位

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM