Java - 将double设置为currency,将值设置为1美元,省略0

时间:2017-03-16 02:51:17

标签: java double currency

第一次发帖。对不起,如果我搞砸了。

基本上,如果double的值为2.0,则返回 $ 2.00 的代码,但如果double的值为.75(而不是$ 0.75),则返回$ .75。

我的问题是试图找出如何做到这一点。我可以使用formatter.format(price),但这并没有省略前导0.我也可以尝试

String sPrice = String.valueOf(price);
sPrice = sPrice.replaceFirst("^0+", "");

但我的问题是,一旦我达到这一点,当我最终打电话给它时,我为自己做了更多的工作,因为我必须让它添加0如果有& #39;小数点后只有一个数字。

如果您想查看它,请查看我的完整代码,如果有帮助的话。

import java.text.*;

public class MenuItem
{
    private String name;
    private double price;
    private NumberFormat formatter = NumberFormat.getCurrencyInstance();

    public MenuItem(String name, double price)
    {
        this.name = name;
        this.price = price;
    }

    public String getName()
    {
        return name;
    }

    public double getPrice()
    {
        return price;
    }

    public String toString()
    {
        return name + " " + formatter.format(price);
    }

}

提前致谢。

5 个答案:

答案 0 :(得分:2)

你可以使用它,

NumberFormat formatter = NumberFormat.getCurrencyInstance(); formatter.setMinimumIntegerDigits(X);

其中x是您想要的位数。

根据输入,可以根据需要推出更多x。

答案 1 :(得分:1)

您可以使用简单的自定义DecimalFormat代替标准币NumberFormat

private static final DecimalFormat FORMAT = new DecimalFormat("$#.00");

public static void main(String[] args) {
    System.out.println(FORMAT.format(0));
    System.out.println(FORMAT.format(0.01));
    System.out.println(FORMAT.format(0.75));
    System.out.println(FORMAT.format(1.2345));
    System.out.println(FORMAT.format(2.00));
    System.out.println(FORMAT.format(100.00));
}

输出:

  

$ 00
  $ .01
  $ .75
  $ 1.23
  $ 2.00
  $ 100.00

更新

波希米亚人在评论中提出了一个很好的观点,即上述解决方案非常以美国为中心。如果需要支持其他语言环境,可以更改模式以适合您的语言环境。但是,如果您需要支持多种语言环境,那么该解决方案将无法正常运行。

对于多个语言环境,我认为我只是坚持NumberFormat.getCurrencyInstance(Locale)返回的默认货币格式化程序。如果必须在所有语言环境中删除前导零,那么abo's answer(x = 0)应该可以解决问题。但我会提醒你注意,因为可能存在一些区域,其中前导零不是可选的,而是强制性的。

答案 2 :(得分:0)

如果是public String toString() { String priceString = formatter.format(price); if(price < 1 && price > -1 && price != 0) priceString = 0+ priceString; return name + " " + priceString; }

,你可以使用简单的子字符串
<!-- for mobile -->
<link rel="stylesheet" href="/dist/css/mobile.css">

<!-- for desktop -->    
<link rel="stylesheet" href="/dist/css/desktop.css">

答案 3 :(得分:0)

尝试更简单的方法

     double one = 0.75;
     double two = 2.00;

     System.out.println(String.format("$%.2f", one).replace("$0.", "$."));
     System.out.println(String.format("$%.2f", two).replace("$0.", "$."));

答案 4 :(得分:0)

您遇到字符串问题,请使用字符串解决方案:

return name + " " + formatter.format(price).replaceAll("\\b0\\.", ".");

\\b(字边界)可确保您不会将"$10.50"更改为"$1.50"