Android Java DecimalFormat中解决.00的问题

本文介绍了一种使用Java DecimalFormat类格式化浮点数的方法,确保数值以每三位加逗号的方式展示,并保留指定的小数位数。通过调整模式字符串中的占位符,解决了特定情况下数字显示不完整的问题。

 最近在做一个数字显示效果:每三个数字加一个逗号,并且保留两位小数。

如:332,630.00 195,717.00 使用的代码是:

public static String format2Decimal(float data) {
    DecimalFormat df = new DecimalFormat("#,###.00");
    return df.format(data);
}
但是在实现数字“0.00”的时候,变成了“.00”,“0.12”变成了“.12”,这样就不是我要的效果了。

 查阅了资料后发现,DecimalFormat 类主要靠 # 和 0 两种占位符号来指定数字长度。

0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。

这样我就想到了一个方法,把整数最后一位“#”改为“0”,尝试性修改了一下代码,结果完成了我要的效果。代码如下:

/**
 * 将float类型的数据转换成以3位逗号隔开的字符串,并且保留两位小数
 *
 * @return
 */
public static String format2Decimal(float data) {
    DecimalFormat df = new DecimalFormat("#,##0.00");
    return df.format(data);
}

/**
 * 将float类型的数据转换成以3位逗号隔开的字符串,并且保留一位小数
 *
 * @return
 */
public static String format1Decimal(float data) {
    DecimalFormat df = new DecimalFormat("#,##0.0");
    return df.format(data);
}

/**
 * 将float类型的数据转换成以3位逗号隔开的字符串,并且保留整数
 *
 * @return
 */
public static String format0Decimal(float data) {
    DecimalFormat df = new DecimalFormat("#,##0");
    return df.format(data);
}
好了,希望对大家有所帮助。





anr问题trace如下: "main" prio=5 tid=1 Blocked | group="main" sCount=1 ucsCount=0 flags=1 obj=0x72df6468 self=0xb400007072878c00 | sysTid=3104 nice=-2 cgrp=ssfg sched=0/0 handle=0x71230e9d28 | state=S schedstat=( 273294290029 918944300434 897810 ) utm=18065 stm=9263 core=5 HZ=100 | stack=0x7fe106e000-0x7fe1070000 stackSize=8188KB | held mutexes= at com.android.server.alarm.AlarmManagerService$DeliveryTracker.onSendFinished(AlarmManagerService.java:5798) - waiting to lock <0x09677b19> (a java.lang.Object) held by thread 281 at android.app.PendingIntent$FinishedDispatcher.run(PendingIntent.java:382) at android.os.Handler.handleCallback(Handler.java:973) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loopOnce(Looper.java:282) at android.os.Looper.loop(Looper.java:387) at com.android.server.SystemServer.run(SystemServer.java:1069) at com.android.server.SystemServer.main(SystemServer.java:677) at java.lang.reflect.Method.invoke(Native method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:600) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:983) DumpLatencyMs: 212.411 "binder:3104_E" prio=5 tid=281 Runnable | group="main" sCount=0 ucsCount=0 flags=0 obj=0x1770d568 self=0xb400006e2db00800 | sysTid=4606 nice=-2 cgrp=ssfg sched=1073741824/0 handle=0x6e0b1ab730 | state=R schedstat=( 113789554601 690500424244 405734 ) utm=6620 stm=4758 core=5 HZ=100 | stack=0x6e0b0b4000-0x6e0b0b6000 stackSize=989KB | held mutexes= "mutator lock"(shared held) at android.icu.util.Currency.getAvailableCurrencyCodes(Currency.java:200) at libcore.icu.ICU.getCurrencyCode(ICU.java:671) at java.util.Currency.getInstance(Currency.java:421) at java.text.DecimalFormatSymbols.initializeCurrency(DecimalFormatSymbols.java:933) at java.text.DecimalFormatSymbols.setCurrency(DecimalFormatSymbols.java:508) at java.text.DecimalFormatSymbols.fromIcuInstance(DecimalFormatSymbols.java:1085) at java.text.DecimalFormat.getDecimalFormatSymbols(DecimalFormat.java:2819) at java.text.SimpleDateFormat.zeroPaddingNumber(SimpleDateFormat.java:1678) at java.text.SimpleDateFormat.subFormat(SimpleDateFormat.java:1593) at java.text.SimpleDateFormat.format(SimpleDateFormat.java:1117) at java.text.SimpleDateFormat.format(SimpleDateFormat.java:1087) at java.text.DateFormat.format(DateFormat.java:333) at java.text.Format.format(Format.java:159) at com.android.server.alarm.AlarmManagerService.setImplLocked(AlarmManagerService.java:2473) at com.android.server.alarm.AlarmManagerService.setImpl(AlarmManagerService.java:2425) - locked <0x09677b19> (a java.lang.Object) at com.android.server.alarm.AlarmManagerService$4.set(AlarmManagerService.java:3103) at android.app.IAlarmManager$Stub.onTransact(IAlarmManager.java:198) at android.os.Binder.execTransactInternal(Binder.java:1523) at android.os.Binder.execTransact(Binder.java:1457) DumpLatencyMs: 84.4358这最后分析是什么结果呢
最新发布
08-20
FATAL EXCEPTION: main Process: com.kotei.overseas.navi, PID: 13638 java.lang.NumberFormatException: For input string: "0.5mil" at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) at java.lang.Double.parseDouble(Double.java:538) at com.kotei.overseas.navi.business.search.SearchController.getTextQuery(SearchController.java:526) at com.kotei.overseas.navi.business.search.SearchController.keywordSearch(SearchController.java:214) at com.kotei.overseas.navi.mvvm.search.AroundDataHelper.loadMoreData(AroundDataHelper.java:3058) at com.kotei.overseas.navi.mvvm.search.AroundDataHelper.lambda$startDistanceandCategorySearch$28(AroundDataHelper.java:2498) at com.kotei.overseas.navi.mvvm.search.AroundDataHelper.$r8$lambda$ICmaigsrujfhTO9Wx_vP_BnBbjI(Unknown Source:0) at com.kotei.overseas.navi.mvvm.search.AroundDataHelper$$ExternalSyntheticLambda10.onItemClick(D8$$SyntheticClass:0) at com.kotei.ui.sdk_module_ui_s31a.adapter.DistanceFilterAdapter.lambda$getView$0(DistanceFilterAdapter.java:77) at com.kotei.ui.sdk_module_ui_s31a.adapter.DistanceFilterAdapter.$r8$lambda$t8HToHT_zZ-XbXRCuRBli_noHjs(Unknown Source:0) at com.kotei.ui.sdk_module_ui_s31a.adapter.DistanceFilterAdapter$$ExternalSyntheticLambda0.onClick(D8$$SyntheticClass:0) at android.view.View.performClick(View.java:7459) at android.view.View.performClickInternal(View.java:7436) at android.view.View.access$3600(View.java:821) at android.view.View$PerformClick.run(View.java:28335) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7814) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:952)
08-16
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值