开发者

round decimal to nearest 10th

开发者 https://www.devze.com 2022-12-13 23:12 出处:网络
need to round my answer to nearest10th. double finalPrice = everyMile + 2.8; DecimalFormat fmt = new DecimalFormat(\"0.00\");

need to round my answer to nearest10th.

    double finalPrice = everyMile + 2.8;
    DecimalFormat fmt = new DecimalFormat("0.00");
    this.answerField.setText("£" + fmt.format(finalPrice) + " Approx");

the above code rounds a whole number to the nearest 10th however it wont开发者_JS百科 round a decimal. e.g 2.44 should be rounded to 2.40


Use BigDecimal instead.

You really, really don't want to use binary floating point for monetary values.

EDIT: round() doesn't let you specify the decimal places, only the significant figures. Here's a somewhat fiddly technique, but it works (assuming you want to truncate, basically):

import java.math.*;

public class Test
{
    public static void main(String[] args)
    {
        BigDecimal bd = new BigDecimal("20.44");
        bd = bd.movePointRight(1);
        BigInteger floor = bd.toBigInteger();
        bd = new BigDecimal(floor).movePointLeft(1);
        System.out.println(bd);
    }
}

I'd like to hope there's a simpler way of doing this...


Change a bit the pattern to hard-code the final zero:

double finalPrice = 2.46;
DecimalFormat fmt = new DecimalFormat("0.0'0'");
System.out.println("£" + fmt.format(finalPrice) + " Approx");

Now, if you're manipulating real-world money, you'd better not use double, but int or BigInteger.


This outputs 2.40

BigDecimal bd = new BigDecimal(2.44);
System.out.println(bd.setScale(1,RoundingMode.HALF_UP).setScale(2));


Try the following:

double finalPriceRoundedToNearestTenth = Math.round(10.0 * finalPrice) / 10.0;


EDIT

Try this:

double d = 25.642;
String s = String.format("£ %.2f", Double.parseDouble(String.format("%.1f", d).replace(',', '.')));
System.out.println(s);

I know this is a stupid way, but it works.

0

精彩评论

暂无评论...
验证码 换一张
取 消