当前位置: 首页 > 知识库问答 >
问题:

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

苗承
2023-03-14

这是我的简化代码

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四舍五入,并具有与可变利率相同的小数位数,但利率可以具有不同的小数位数,这取决于用户输入的内容,因此利率的小数位数需要不断变化

例如,用户输入

速率=52.38//2位小数

金额=45.53

如果我们购买=(利率*金额)购买

BUY will be BUY=2384.8614//有4个小数点,但应该是2 like RATE,而且还知道double,它可能会显示大约15个小数点

如果用户要重试并输入

速率=65.879//3位小数

购买也应该有3位小数

我如何使购买适应小数位数的汇率

共有1个答案

单于骁
2023-03-14

好吧,问题仍然不清楚您是否要舍入或打印到小数点后几位,就像速率一样。但这里有一个解决方案,它将显示与速率相同的位数:

        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

在这里,我从RATE中提取总位数

 类似资料:
  • 我在C#中尝试了这一点,结果是正确的。

  • 我想把54.5345四舍五入到54.54,也就是说,如果我有第三个小数位,那么我想在第二个小数位上加1。 我试过用math.round但如果第三小数小于5,它总是四舍五入

  • 为什么四舍五入到 1 位的数字仍然写入具有许多位数的 Excel。 例如: 尽管我在写<code>myvar</code>,它已四舍五入到单元格A1的一位数字,尽管单元格显示4567.2,但单击单元格会显示整个值,所有数字位于公式栏尾数右侧。 我应该期待这种行为吗?

  • 问题内容: 如何将matchpercent的结果四舍五入到小数点后两位(%)?我正在使用以下方法返回一些结果: 问题答案: 转换/转换结果: …这里的数字足够大,不能截断小数点左边。也就是说,如果使用“ 123.456”,则由于总长度为7位,因此需要使用DECIMAL(7,2)。

  • 我对java相当陌生,我必须创建这个程序,我不知道从哪里开始。有人能帮我做什么,以及如何写代码开始吗? 编写一个模拟收银机的程序。提示用户输入三件商品的价格。将它们相加以获得小计。确定小计的税额(6%)。查找销售小计加税额的总额。显示每件商品的价格、小计金额、税额和最终金额。 到目前为止,我有这个: 输出(如果价格为price1=1.65,price2=2.82和price3=9.08美元)如下所

  • 谁能告诉我如何在SWIFT中舍入一个双倍值到小数点位数的x位? 我有: 当我打印时,如何将其舍入到1.543?