java - 如何在 Java 中将格式化程序设置为变量?

标签 java android format

我想根据存储在另一个变量双“i”中的数字在 Java 中格式化双变量。比方说,如果 i=3,那么我想格式化

decimals_text = String.format("%."+String.valueOf(3)+"f", 2.123);

如果 i=5 那么

decimals_text = String.format("%."+String.valueOf(5)+"f", 2.123);

问题是如果我使用 String.valueOf(3) 而不是 String.valueOf(i) 那么我会得到错误:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.rpncalculator, PID: 376
java.lang.RuntimeException: Unable to start activity   ComponentInfo{com.example.rpncalculator/com.example.rpncalculator.MainActivity}:   java.util.UnknownFormatConversionException: Conversion = '.'
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6494)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
 Caused by: java.util.UnknownFormatConversionException: Conversion = '.'
    at java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2781)
    at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2811)
    at java.util.Formatter$FormatSpecifierParser.<init>(Formatter.java:2624)
    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:2770)
    at com.example.rpncalculator.MainActivity.onCreate(MainActivity.java:134)
    at android.app.Activity.performCreate(Activity.java:7009)
    at android.app.Activity.performCreate(Activity.java:7000)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
    at android.app.ActivityThread.-wrap11(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6494) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

如何解决这个问题?

最佳答案

您可以改用 BigDecimal

BigDecimal bd = new BigDecimal("2.133");
int roundTo = 2;

bd = bd.setScale(roundTo, RoundingMode.HALF_EVEN);
System.out.println(bd);

关于java - 如何在 Java 中将格式化程序设置为变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58797934/

相关文章:

java - 接收方类o.s.c.b.BootstrapApplicationListener $ CloseContextOnFailureApplicationListener未定义或继承impl

java - Android 蓝牙设备 UUID

安卓2D平台游戏

format - 是否有格式规范可以输出特定于操作系统的换行符?

java - 更改、修改和重新打包 CXF-API 源文件

java - Web 应用程序 java 中的配置属性

android - Nexus 7 (2013) 和 Win 7 64 - 尽管检查了许多论坛和在线资源,但无法安装 USB 驱动程序

javascript - 如何在我的APP中获取youtube视频? (使用 Phonegap 构建)

python - 如何在 Python 中将耗时从秒格式化为小时、分钟、秒和毫秒?

Python:打印到一行,打印之间有时间延迟