-1

我正在尝试用两个十进制值(如果可能)以纯文本打印出浮点值。例如,如果我在数据库中有 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);
4

6 回答 6

3

你应该使用什么?

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

文档可在此处获得。

只要给我看代码!

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

输出是

1144.03
于 2013-01-07T21:25:55.323 回答
2

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

于 2013-01-07T21:25:07.587 回答
2

DecimalFormat 提供(有时不需要)区域设置小数点(“。”与“,”)最近我改为使用

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

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

于 2013-01-07T21:31:46.750 回答
0

A float has a limited accuracy of approximately 7 to 8 decimal digits. Once you store a value in a float you cannot expect more significant digits no matter how you post process it.

于 2013-01-07T21:28:51.540 回答
0

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

至少,您需要使用 adouble来保存数字。使用 16 位有效十进制数字,它至少可以表示该数量级的 0.01 的差异。然而,计算仍然只是近似的。

如果您需要精确的表示和计算,请使用 aBigDecimal代替。

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

于 2013-01-07T21:37:06.683 回答
0

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

在事实为时已晚后将其转换为双重,信息已丢失。

您必须使用双精度,即每个值可能通过的地方都使用 64 位浮点(或者对于数据库,您可以使用固定精度)


float不是金额(或大多数东西)的最佳格式我建议使用 double 代替(或 BigDecimal 或具有固定精度的 long )

代替

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

你可以写

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

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

于 2013-01-07T21:39:18.863 回答