格式化货币没有货币符号

时间:2011-12-28 16:02:32

标签: java currency number-formatting

我正在使用NumberFormat.getCurrencyInstance(myLocale)为我提供的区域设置获取自定义货币格式。但是,这总是包含我不想要的货币符号,我只想要我没有货币符号的给定区域设置的正确货币编号格式。

执行format.setCurrencySymbol(null)会抛出异常..

13 个答案:

答案 0 :(得分:51)

以下作品。这有点难看,但它符合合同:

NumberFormat nf = NumberFormat.getCurrencyInstance();
DecimalFormatSymbols decimalFormatSymbols = ((DecimalFormat) nf).getDecimalFormatSymbols();
decimalFormatSymbols.setCurrencySymbol("");
((DecimalFormat) nf).setDecimalFormatSymbols(decimalFormatSymbols);
System.out.println(nf.format(12345.124).trim());

您还可以从货币格式中获取模式,删除货币符号,并从新模式重建新格式:

NumberFormat nf = NumberFormat.getCurrencyInstance();
String pattern = ((DecimalFormat) nf).toPattern();
String newPattern = pattern.replace("\u00A4", "").trim();
NumberFormat newFormat = new DecimalFormat(newPattern);
System.out.println(newFormat.format(12345.124));

答案 1 :(得分:44)

使用空字符串设置它:

DecimalFormat formatter = (DecimalFormat) NumberFormat.getCurrencyInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setCurrencySymbol(""); // Don't use null.
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(12.3456)); // 12.35

答案 2 :(得分:2)

只需使用
而不是NumberFormat.getInstance(),如下所示:

NumberFormat.getCurrencyInstance()

答案 3 :(得分:2)

我仍然看到人们在2020年回答这个问题,为什么不呢

NumberFormat nf = NumberFormat.getInstance(Locale.US);
nf.setMinimumFractionDigits(2); // <- the trick is here
System.out.println(nf.format(1000)); // <- 1,000.00

答案 4 :(得分:0)

DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(2);
String formatted = df.format(num);

适用于num的多种类型,但请勿忘记represent currency with BigDecimal

对于num小数点后可能超过两位数的情况,您可以使用df.setMaximumFractionDigits(2)仅显示两个数字,但这只能隐藏运行该问题的任何人的潜在问题应用

答案 5 :(得分:0)

也许我们可以使用replace或substring来获取格式化字符串的数字部分。

NumberFormat fmt = NumberFormat.getCurrencyInstance(Locale.getDefault());
fmt.format(-1989.64).replace(fmt.getCurrency().getSymbol(), "");
//fmt.format(1989.64).substring(1);  //this doesn't work for negative number since its format is -$1989.64

答案 6 :(得分:0)

给定的解决方案有效,但最终为Euro留了一些空白。 我结束了:

numberFormat.format(myNumber).replaceAll("[^0123456789.,]","");

这可以确保我们使用的数字格式不包含货币或其他任何符号。

答案 7 :(得分:0)

两行答案

NumberFormat formatCurrency = new NumberFormat.currency(symbol: "");
var currencyConverted = formatCurrency.format(money);

在TextView中

new Text('${formatCurrency.format(money}'),

答案 8 :(得分:0)

此处提供的大多数(全部)解决方案在较新的Java版本中没有用。请使用此:

DecimalFormat formatter = (DecimalFormat) DecimalFormat.getCurrencyInstance(Locale.forLanguageTag("hr"));
formatter.setNegativeSuffix(""); // does the trick
formatter.setPositiveSuffix(""); // does the trick

formatter.format(new BigDecimal("12345.12"))

答案 9 :(得分:0)

 public override int SaveChanges()
    {
        var selectedEntityList = ChangeTracker.Entries()
            .Where(x => (x.Entity is IEntityCreatedAt ||
                         x.Entity is IEntityModifiedAt ||
                         x.Entity is IEntityIsDeleted) &&
                        (x.State == EntityState.Added || x.State == EntityState.Modified)).ToList();

        selectedEntityList.ForEach(entity =>
        {
            if (entity.State == EntityState.Added)
            {
                if (entity.Entity is IEntityCreatedAt)
                    ((IEntityCreatedAt)entity.Entity).CreatedAt = DateTimeOffset.UtcNow;
            }

            if (entity.State == EntityState.Modified)
            {
                if (entity.Entity is IEntityModifiedAt)
                    ((IEntityModifiedAt)entity.Entity).ModifiedAt = DateTimeOffset.UtcNow;

                if (entity.Entity is IEntityIsDeleted)
                    if (((IEntityIsDeleted)entity.Entity).IsDeleted)
                        ((IEntityIsDeleted)entity.Entity).DeletedAt = DateTimeOffset.UtcNow;
            }
        });

        return base.SaveChanges();
    }

答案 10 :(得分:0)

这里是带有任何符号(m2、货币、公斤等)的代码

fun EditText.addCurrencyFormatter(symbol: String) {

   this.addTextChangedListener(object: TextWatcher {

        private var current = ""

        override fun afterTextChanged(s: Editable?) {
        }

        override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
        }

        override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {

            if (s.toString() != current) {
                this@addCurrencyFormatter.removeTextChangedListener(this)

                val cleanString = s.toString().replace("\\D".toRegex(), "")
                val parsed = if (cleanString.isBlank()) 0.0 else cleanString.toInt()

                val formatter = DecimalFormat.getInstance()

                val formated = formatter.format(parsed).replace(",",".")

                current = formated
                this@addCurrencyFormatter.setText(formated + " $symbol")
                this@addCurrencyFormatter.setSelection(formated.length)

                this@addCurrencyFormatter.addTextChangedListener(this)
            }
        }
    })

}

-与-一起使用

edit_text.addCurrencyFormatter("TL")

答案 11 :(得分:-1)

请尝试以下操作:

var totale=64000.15
var formatter = new Intl.NumberFormat('de-DE');
totaleGT=new Intl.NumberFormat('de-DE' ).format(totale)

答案 12 :(得分:-2)

货币格式“没有符号”需要,当您收到大量报表或视图且几乎所有列都代表货币值时,符号很烦人,没有必要符号,但是千位分隔符和小数逗号是。 你需要

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

而不是

new DecimalFormat("$#,##0.00");