This question already has answers here:
How to round a number to n decimal places in Java
                                
                                    (31个答案)
                                
                        
                        
                            How to Round Decimals to 2 Places after the Decimal Point (Java)
                                
                                    (4个答案)
                                
                        
                                4年前关闭。
            
                    
我是Java编程的新手。我想将价格四舍五入到小数点后2位。

例如。


38.80保持不变。
38.8138.80
38.8238.80
38.8338.85
38.8438.85
38.85保持不变。
38.8638.85
38.8738.85
38.8838.90
38.8938.90
38.90保持不变。


我尝试了提供的重复项,但它们仅排到小数点后1位。
例如。 38.8238.8

这是我的代码:

import java.text.DecimalFormat;

public class RoundUp {

    public static void main(String[] args){
        DecimalFormat df = new DecimalFormat("#.##");
        double num = 38.84;
        System.out.println(df.format(Math.round(num*10.00)/10.00));
    }
}


我已经研究了本网站专家提供的其他模型答案,但没有一个人能真正回答我的问题。设置为2位小数,我使用的是DemicalFormat。我知道,但是四舍五入,例如,我真正想要的是38.83至38.85和38.87至38.90。
这是我国正在使用的舍入系统。可以检出here

**


  该问题已由@Mureinik双重舍入=
  Math.round(num * 100.0 / 5.0)* 5.0 / 100.0;


**

最佳答案

我建议您在处理货币时使用BigDecimal而不是double。

然后就像

BigDecimal value = new BigDecimal(38.84);
value = value.setScale(2, BigDecimal.ROUND_HALF_UP)


您可以引用Javadocs for ROUND_HALF_UPsetScale

关于java - 在Java中舍入价格数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30635669/

10-12 05:48