将float格式化为两个十进制格式

时间:2013-01-07 21:22:37

标签: java

我正在尝试使用两个十进制值(如果可能)打印纯文本中的浮点值。例如,如果我在数据库中有229806210.039999,那么我想将其打印为229806210.04,但由于某种原因它以科学记数法打印出来:2.29806208E8,这是不正确的,因为最后两位数是08而不是10我尝试将数字转换为双倍和货币格式,然后将其打印出来,但数字仍然是关闭的(最后两位数字为08而不是10)。有没有办法解决这个问题?这就是我现在所拥有的:

float amount = 0;
amount = something.getAmount() //this will run the query
                              //to retrieve the amount stored in database (i.e. 229806210.039999)
Stringbuilder buffer = new StringBuilder();
buffer.append ("the amount = " + amount)
emailObject.setBody(buffer.toString());
emailService.sendEmail(emailObject);

6 个答案:

答案 0 :(得分:2)

这看起来像Java,所以请看DecimalFormat。很好地记录了如何格式化数字。

答案 1 :(得分:2)

您应该使用什么?

您应该使用DecimalFormat。 它需要一个具有所需格式的参数并返回格式化程序

文档可用here

只需告诉我代码!

Double number = 1144.034;
DecimalFormat format = new DecimalFormat("0.00");
System.out.println(format.format(price));

输出

1144.03

答案 2 :(得分:1)

DecimalFormat给出(有时不需要的)区域设置小数点(“。”vs.,“,”) 最近我换了

double x= ...;
String formatted = String.format(Locale.US, "%.2d", x);

更方便,(C风格格式符号)

答案 3 :(得分:0)

浮点数的精度有限,大约为7到8位十进制数。一旦您将值存储在浮点数中,无论您如何处理它,都不能指望更高的数字。

答案 4 :(得分:0)

浮点数用于近似计算,具有固定的有效位数。也就是说,float只存储数字的指数,以及数字的前24个二进制数字(大约7个十进制数字)。由于您的号码超过7位数,因此舍入将删除剩余的数字。

至少,您需要使用double来保存该号码。对于16个有效十进制数字,它至少可以表示该数量的数字的0.01的差异。但是,计算仍然只是近似值。

如果您需要精确的表示和计算,请改用BigDecimal

最后,要格式化数字,请使用NumberFormat。 Java Tutorial很好地解释了这一点。

答案 5 :(得分:0)

  

我尝试在打印之前将数字转换为double和货币格式,但数字仍然是关闭的(最后两位数字为08而不是10)。有没有办法解决这个问题?

事实为时已晚,将其投入双倍,信息已丢失。

您必须在值可能已经传递的位置使用双精度,即64位浮点数(或者对于数据库,您可以使用固定精度)


float不是数量(或大多数事情)的最佳格式我建议使用double(或BigDecimal或长固定精度)

而不是

Stringbuilder buffer = new StringBuilder();
buffer.append ("the amount = " + amount)
emailObject.setBody(buffer.toString());

你可以写

emailObject.setBody(String.format("the amount = %.2f%n" , amount));

拥有至少一个换行符可能是“礼貌的”。 ;)