在 Java 中浮动到货币

Posted

技术标签:

【中文标题】在 Java 中浮动到货币【英文标题】:Float to currency in Java 【发布时间】:2012-11-08 06:10:17 【问题描述】:

如果输入一个数字(浮点数),例如 12500,则该数字将转换为货币格式为 12,500.00。格式为“###,###,###.##”。如何使用 java 和 没有 任何 apache utils 或类似库来做到这一点。每 3 位数字后将重复一个逗号,小数点将四舍五入并显示为小数点后 2 位数字。如果 0.5 它应该是 0.50 并且 如果是 0.569,它应该是 0.57。有什么办法可以通过正则表达式什么的解决这个问题吗?

【问题讨论】:

浮点数永远不能代表货币。如果您的软件接受浮点数作为参数并打算将其转换为货币,则它已经是一个错误。 float 不应用于货币(或大多数事物),因为它的精度很差。我建议你使用doublelong cents 或BigDecimal 【参考方案1】:

通过在 Google 上进行一些搜索,我找到了以下代码...可能对您有所帮助...

查看此链接,这对理解很有帮助。在此链接中,只有他们提供了必要格式的方法...

http://docs.oracle.com/javase/tutorial/i18n/format/numberFormat.html

static public void displayCurrency( Locale currentLocale) 

    Double currencyAmount = new Double(9876543.21);
    Currency currentCurrency = Currency.getInstance(currentLocale);
    NumberFormat currencyFormatter = 
        NumberFormat.getCurrencyInstance(currentLocale);

    System.out.println(
        currentLocale.getDisplayName() + ", " +
        currentCurrency.getDisplayName() + ": " +
        currencyFormatter.format(currencyAmount));

前面几行代码生成的输出如下:

French (France), Euro: 9 876 543,21 €
German (Germany), Euro: 9.876.543,21 €
English (United States), US Dollar: $9,876,543.21

在这种情况下,您可以选择区域设置,甚至可以在不知道特定国家/地区使用的格式的情况下享受。

【讨论】:

他要求的格式是在 2 位数字后有第一个逗号,然后从左侧开始所有剩余的 3。 他已经提供了货币格式,但是使用这个代码他甚至不需要关心货币格式。他必须不关心/研究货币格式,因为 sun 团队已经努力寻找这些格式。 :) 我会使用double 而不是Double【参考方案2】:
      public static void main(String args[])
      
      float amount =  2192.05f;
      NumberFormat formatter = new DecimalFormat("###,###,###.##");
       System.out.println("The Decimal Value is:"+formatter.format(amount));
      

【讨论】:

这个解决方案如何在每 3 位数字后加一个逗号?您是否正确阅读了问题?此外,您的代码不会编译。 @BhavikShah.. 你为什么不必要地使用类型转换。只需在 RHS 上使用 float 值。

以上是关于在 Java 中浮动到货币的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows Phone 8.1 中获取当前位置的当前货币代码

从字符串中提取货币和价格值

考虑到货币符号的数字的通用转换

将货币字符串转换为数字 Drupal Views / PHP

商品到货币是一次惊险的跳跃(太残酷啊)

零基础学基金投资系列-04-基金的分类