【问题标题】:Convert String Number to Double and then correct format in Java将字符串数字转换为双精度,然后在 Java 中正确格式
【发布时间】:2012-12-19 15:25:00
【问题描述】:

好的,我已经为此搜索了 2 个小时,请在跳转以将其标记为重复之前查看问题。

我有许多包含数字的字符串

数字都会是这样的

String one = 611960;
String two = 64850;
String three = 0;
String four = 636;

我希望能够以正确的格式拥有这些

6,119.60 648.50 0.00 6.36

我试过了

DecimalFormat df = new DecimalFormat("#,###,###,##0.00");

并将字符串转换为双精度,例如

double amount = Double.parseDouble(one);

这似乎给了 611960.0

那我做

String gfeeOne = df.format(amount);

这反过来又给了 611,960.00

所以在这个阶段我有点迷茫。这应该很简单,也许我迷路了。我想涵盖所有情况,例如 1000000000 1,000,000,000.00

帮助非常感谢

【问题讨论】:

  • 您的字符串不是小数,但格式化后您期望小数? AFAIK,DecimalFormat 是我认为您可能正在尝试做的所有事情。
  • 看你的号码...字符串一 = 611960;。它没有任何数字,它是一个整数。 parseDouble 正在完成它的工作。

标签: java numbers format


【解决方案1】:

您拥有的字符串被解释为整数,因为它们没有任何类型的小数分隔符(这取决于语言环境,请注意...)。所以你基本上只需要将你的数字除以 100,或者换句话说,将小数点向左移动两位。

你应该试试:

double amount = Double.parseDouble(one)/100.0;

或者,更好的是,您可以从基本的浮点舍入问题中解脱出来,并使用BigDecimal

BigDecimal amount = new BigDecimal(one).movePointLeft(2);
String gfeeOne = df.format(amount);

警告如果考虑到非常大的值,请务必使用BigDecimal,因为这样可以保持精度,而浮点数可能会丢失精度。

【讨论】:

  • 来杯茶好了。非常感谢。我知道这是一件小事,但需要聪明的人才能注意到;)。我认为这将适用于高达 10 亿的所有数字。
  • @topcat3 如果考虑到非常大的数字,则必须使用 BigDecimal 来保持所表示值的精度。并且不要忘记,如果你的值是 10 亿,由于缺少小数分隔符,它会被解释为 1000 亿,所以在这种情况下,精度会丢失......
【解决方案2】:

你也可以使用String.Format:

String one = String.Format("%,.2f", (double)611960);

(double) 会将整数值转换为浮点值。格式字符串%,.2f 会将浮点数(f)转换为带两个小数点的字符串表示(.2)并添加分组分隔符(,)。

【讨论】:

  • 就我而言,我需要对数字进行计算,如 add one+two+three 。在那种情况下会起作用吗
  • 是的,所以我会和@ppeterka 一起去把我的双打加起来。谢谢。我给你竖起大拇指:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
相关资源
最近更新 更多