使用%1 $ f但没有尾随零

时间:2016-07-14 18:21:58

标签: android concatenation placeholder

我试图寻找这个问题的解决方案,但我不确定如何提出这个问题。

我将使用单词和数字填充TextView,并将其设置在Activity中。

        float leftTimeSecs = leftTime / 1000;
        float roundedLeftSecs = round(leftTimeSecs, 3);
        //How to access this directly from "strings" or .xml files
        duration.setText(getString(R.string.time_data_sec, roundedLeftSecs,
                getString(R.string.seconds)));

我将文字设置为的字符串是:

<string name="time_data_sec">Duration: %1$f %2$s</string>

并且调用的round函数是

 public static float round(float value, int places) {
        if (places < 0) throw new IllegalArgumentException();
        BigDecimal bigDecimal = new BigDecimal(value);
        bigDecimal = bigDecimal.setScale(places, RoundingMode.HALF_UP);
        return bigDecimal.floatValue();
    }

我希望输出打印来自roundedLeftSecs的值(leftTime舍入到三个位置),但是当我不对其中的roundLeftSecs进行硬编码时,将在舍入后的数字后产生许多尾随零。

我发现%1 $ d是一个小数占位符,但它不允许我使用浮点数或双精度表达式,所以我不确定如何摆脱这个零或甚至可能。

1 个答案:

答案 0 :(得分:0)

对于那些有同样问题的人,我通过使用%1 $ s并将我的舍入数字转换为字符串来解决它,它完美无缺!

这是我想要回合的地方:

    float leftTimeSecs = leftTime / 1000;
                float roundedLeftSecs = round(leftTimeSecs, 3);
                String roundedLeftSecString = Float.toString(roundedLeftSecs);
                duration.setText(getString(R.string.time_data_sec, roundedLeftSecString,
                        getString(R.string.seconds)));

这是字符串:

<string name="time_data_sec">Duration: %1$s %2$s</string>