Android格式化百分比

有时候我们需要显示这样一个东西例如:59.6%,但是呢又不想使用两个TextView,于是呢就想到了使用字符串格式化的方式创建一个如下的资源文件

<string name="format_change_range">%.2f%</string>

然后呢再到TextView中使用

<androidx.appcompat.widget.AppCompatTextView
    style="@style/TextViewStyle.White"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="@dimen/margin"
    android:text="@{@string/format_change_range(turnover.changeRange)}"

于是呢就得到了这样 一个东西

2019-10-18 13:16:19.060 21326-21326/com.****.**** E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.microsight.kuaibu, PID: 21326
    java.util.UnknownFormatConversionException: Conversion = 'End of String'
        at java.util.Formatter$FormatSpecifierParser.peek(Formatter.java:2641)
        at java.util.Formatter$FormatSpecifierParser.<init>(Formatter.java:2602)
        at java.util.Formatter.parse(Formatter.java:2557)
        at java.util.Formatter.format(Formatter.java:2504)
        at java.util.Formatter.format(Formatter.java:2458)
        at java.lang.String.format(String.java:2883)
        at android.content.res.Resources.getString(Resources.java:466)
        at com.****.****.databinding.ActivityTurnoverBindingImpl.executeBindings(ActivityTurnoverBindingImpl.java:173)
        at androidx.databinding.ViewDataBinding.executeBindingsInternal(ViewDataBinding.java:472)
        at androidx.databinding.ViewDataBinding.executePendingBindings(ViewDataBinding.java:444)
        at androidx.databinding.ViewDataBinding$7.run(ViewDataBinding.java:196)
        at androidx.databinding.ViewDataBinding$6.onViewAttachedToWindow(ViewDataBinding.java:164)
        at android.view.View.dispatchAttachedToWindow(View.java:18358)
        at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3397)
        at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3404)
        at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3404)
        at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3404)
        at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3404)
        at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3404)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1761)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
        at android.view.Choreographer.doCallbacks(Choreographer.java:761)
        at android.view.Choreographer.doFrame(Choreographer.java:696)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

后来无意中惊奇的发现这样就可以解决错误

<string name="format_change_range">%.2f%%</string>

虽然不知道为什么,但还是很开心的

哪位仁兄能解释一下呢
avatar
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。