我正在使用NumberFormat.getCurrencyInstance(myLocale)
为我提供的区域设置获取自定义货币格式。但是,这总是包含我不想要的货币符号,我只想要我没有货币符号的给定区域设置的正确货币编号格式。
执行format.setCurrencySymbol(null)
会抛出异常..
答案 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");