【问题标题】:How to add leading spaces to format a decimal?如何添加前导空格来格式化小数?
【发布时间】:2017-10-10 01:41:46
【问题描述】:

左图是我现在所拥有的。正确的图像是我的目标。

小数点前的整数需要三个空格。如果是 0,我只需要在 0 之前显示两个空格即可。我就是这样做的,但它不起作用,因为它会产生左侧图像。我需要它在小数点前强制三个空格。

    mAttemptOneScore.setText(String.format("%3.2f", mScoreAttemptOne));
    mAttemptTwoScore.setText(String.format("%3.2f", mScoreAttemptTwo));
    mAttemptThreeScore.setText(String.format("%3.2f", mScoreAttemptThree));
    mAttemptFourScore.setText(String.format("%3.2f", mScoreAttemptFour));
    mTotalScore.setText(String.format("%3.2f", mFinalScore));

【问题讨论】:

  • 即使有人给你代码来填充字符串,我认为你仍然可能有格式问题,特别是如果你的字体不是等宽的。你看,一个空格和一个零在非等宽字体中可能不会占用相同的宽度,实际上甚至可能没有办法使用空格对齐所有内容。在这里进行操作的更好方法可能是为分数的 RHS 使用单独的文本视图。
  • 不确定使用不同的文本视图是什么意思。 I am not doing it?
  • 不,我是说等号右侧的所有内容都是单独的文本视图。然后你可以保证你想要的对齐方式。
  • @TimBiegeleisen 现在,我将每个文本视图都放在等号右侧,以包裹内容。我想我必须设置一个静态宽度来确保这一点。不想这样做,因为空间因设备大小而异。

标签: java android string-formatting decimalformat


【解决方案1】:

看起来您的尝试次数是固定的。 在这种情况下,构建 UI 的正确方法是使用 GridLayout:https://developer.android.com/reference/android/widget/GridLayout.html

如果您仍想使用基于文本的格式,有多种解决方案。

  1. 基于制表符的格式 mAttemptTwoScore.setText(String.format("On %d attempt \t\t%d * %.2f\t=%3.2f", ...));

  2. HTML 格式,使用 html 构建您的 UI 并使用此方法 @SuppressWarnings("deprecation") public static Spanned getSpanned(String text) { Spanned spanned; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) spanned = Html.fromHtml(text, Html.FROM_HTML_MODE_LEGACY); else spanned = Html.fromHtml(text); return spanned; } 将 HTML 分配给 TextView。

  3. 第三方库,如https://github.com/thedathoudarya/WAGU-data-in-table-view。你应该保证使用等宽字体。

【讨论】:

  • 谢谢。但是我修复它的方法是将文本视图放置在一个框架布局中,该框架布局具有足够大的固定宽度以容纳我期望的最长小数点。效果很好。
  • @Nico,不。您无法猜测用户设备上使用的是哪种字体。您无法猜测使用的字体大小。您无法控制屏幕尺寸和分辨率。绝对不能保证您的布局之后的外观。
  • 不是他的问题的答案。如果首先回答了确切的问题,则可以提供替代方法。 “使用网格布局”没有回答“如何添加前导空格来格式化小数”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多