如何在Java中将小数点后两位取整? [重复]

| 这个问题已经在这里有了答案:
已邀请:
你在赚钱吗?创建一个
String
然后将其转换回去很容易。 使用
BigDecimal
。已经对此进行了广泛的讨论。您应该有一个
Money
类,金额应该是
BigDecimal
。 即使您不花钱,也要考虑
BigDecimal
只需使用:(就像馅饼一样容易)
double number = 651.5176515121351;

number = Math.round(number * 100);
number = number/100;
输出将是651.52
使用数字占位符(
0
),因为\'
#
\'尾随/前导零显示为不存在:
DecimalFormat twoDForm = new DecimalFormat(\"#.00\");
您不能将双精度数舍入到[任意数量的]小数位,因为双精度数没有小数位。您可以将双精度数转换为具有N个小数位的以10为基数的字符串,因为以10为基数的字符串确实具有小数位,但是当您将其转换回时,您将返回带双精度数的小数位数。
用这个 String.format(\“%。2f \”,doubleValue)//根据您的要求更改2。
这是我能做到的最简单的方法,但是它比大多数我看过的示例都容易完成工作。
    double total = 1.4563;

    total = Math.round(total * 100);

    System.out.println(total / 100);
其结果是1.46。
您可以从apache common使用org.apache.commons.math.util.MathUtils
double round = MathUtils.round(double1, 2, BigDecimal.ROUND_HALF_DOWN);
您可以使用Apache Commons Math:
Precision.round(double x, int scale)
来源:http://commons.apache.org/proper/commons-math/apidocs/org/apache/commons/math3/util/Precision.html#round(double,%20int)
您的Money类可以表示为Long的子类,也可以具有将Money值表示为本地long的成员。然后,在为货币实例分配值时,您将始终存储实际上是真实货币值的值。您只需使用适当的格式输出Money对象(通过Money \的重写toString()方法)。例如,Money对象的内部表示中的$ 1.25是125。您将这些货币表示为美分,便士或要密封的货币的最小面额,然后将其格式化为输出。不,您永远都无法存储“非法”的货币价值,例如$ 1.257。
双倍金额= 25.00; NumberFormat formatter = new DecimalFormat(\“#0.00 \”); System.out.println(formatter.format(amount));
从Java 1.8开始,您可以使用lambda表达式执行更多操作并检查null。另外,下面的一个可以处理Float或Double&可变数量的小数点(包括2 :-)。
public static Double round(Number src, int decimalPlaces) {

    return Optional.ofNullable(src)
            .map(Number::doubleValue)
            .map(BigDecimal::new)
            .map(dbl -> dbl.setScale(decimalPlaces, BigDecimal.ROUND_HALF_UP))
            .map(BigDecimal::doubleValue)
            .orElse(null);
}
您可以尝试以下一种方法:
public static String getRoundedValue(Double value, String format) {
    DecimalFormat df;
    if(format == null)
        df = new DecimalFormat(\"#.00\");
    else 
        df = new DecimalFormat(format);
    return df.format(value);
}
要么
public static double roundDoubleValue(double value, int places) {
    if (places < 0) throw new IllegalArgumentException();

    long factor = (long) Math.pow(10, places);
    value = value * factor;
    long tmp = Math.round(value);
    return (double) tmp / factor;
}
DecimalFormat df = new DecimalFormat(\"###.##\");
double total = Double.valueOf(val);
如果您想将结果保留到小数点后两位
// assuming you want to round to Infinity.
double tip = (long) (amount * percent + 0.5) / 100.0; 
此结果并不精确,但Double.toString(double)会对此进行校正,并打印一到两个小数位。但是,一旦执行其他计算,您将获得不会隐式舍入的结果。 ;)
Math.round
是一个答案,
public class Util {
 public static Double formatDouble(Double valueToFormat) {
    long rounded = Math.round(valueToFormat*100);
    return rounded/100.0;
 }
}
在Spock,Groovy中测试
void \"test double format\"(){
    given:
         Double performance = 0.6666666666666666
    when:
        Double formattedPerformance = Util.formatDouble(performance)
        println \"######################## formatted ######################### => ${formattedPerformance}\"
    then:
        0.67 == formattedPerformance

}
假设金额可以是正数也可以是负数,四舍五入到小数点后两位可以使用以下代码段。
amount = roundTwoDecimals(amount);

public double roundTwoDecimals(double d) {
    if (d < 0)
       d -= 0.005;
    else if (d > 0)
       d += 0.005;
    return (double)((long)(d * 100.0))/100);
}
其中num是双数 整数2表示我们要打印的小数位数。 这里我们取2个小数位 System.out.printf(\“%。2f \”,num);
这是一种保证将myFixedNumber输出四舍五入到小数点后两位的简单方法:
import java.text.DecimalFormat;

public class TwoDecimalPlaces {
    static double myFixedNumber = 98765.4321;
    public static void main(String[] args) {

        System.out.println(new DecimalFormat(\"0.00\").format(myFixedNumber));
    }
}
其结果是:98765.43
    int i = 180;
    int j = 1;
    double div=  ((double)(j*100)/i);
    DecimalFormat df = new DecimalFormat(\"#.00\"); // simple way to format till any deciaml points
    System.out.println(div);
    System.out.println(df.format(div));
首先声明一个
DecimalFormat
类的对象。请注意,
DecimalFormat
中的参数为
#.00
,这意味着四舍五入精确到小数点后两位。
private static DecimalFormat df2 = new DecimalFormat(\"#.00\");
现在,将格式应用于您的double值:
double input = 32.123456;
System.out.println(\"double : \" + df2.format(input)); // Output: 32.12
in28的情况下的注意 那么输出将是
32.10
,依此类推。
您可以使用此功能。
import org.apache.commons.lang.StringUtils;
public static double roundToDecimals(double number, int c)
{
    String rightPad = StringUtils.rightPad(\"1\", c+1, \"0\");
    int decimalPoint = Integer.parseInt(rightPad);
    number = Math.round(number * decimalPoint);
    return number/decimalPoint;
}

要回复问题请先登录注册