【问题标题】:Convert float to string and always get specific length of string?将浮点数转换为字符串并始终获得特定长度的字符串?
【发布时间】:2017-09-08 03:13:37
【问题描述】:

如何将float 转换为String 并始终获得指定长度的结果字符串?

例如,如果我有

float f = 0.023f;

我想要一个 6 个字符的字符串,我想得到 0.0230。但如果我想将其转换为 4 个字符的字符串,结果应该是 0.02。此外,限制为 5 个字符的值 -13.459 应返回 -13.4,并返回 10 个字符 -13.459000

这是我现在正在使用的,但必须有更漂亮的方法来做到这一点......

s = String.valueOf(f);
s = s.substring(0, Math.min(strLength, s.length()));
if( s.length() < strLength )
    s = String.format("%1$-" + (strLength-s.length()) + "s", s);

【问题讨论】:

  • java.text.DecimalFormat
  • 这种格式很奇怪……100000.05 仅限于5 会怎样? 10000? 但必须有更漂亮的方法来做到这一点 String.format("%." + limit + "f", f).substring(0, limit)
  • @Selvin 是的,正确的。在我的具体情况下,我知道我正在处理的数字的范围,我可以调整所需的长度。它用于记录目的,将数字输出到 LogCat 中的“列”中,因此即使输出速率很高并且数字/小数的符号和数量未知(但数字限制在一定范围内),它们也更容易阅读。跨度>
  • @Selvin 似乎在工作,谢谢!
  • For the floating-point conversions 'e', 'E', and 'f' the precision is the number of digits after the decimal separator. — 投入大的整数部分并获得 long-long 输出。

标签: java string-formatting number-formatting string-conversion


【解决方案1】:

来自java.util.Formatter 文档:您可以使用g 修饰符、precision 字段将数字限制为特定数量的字符,并使用width 字段将其填充到列宽。

String.format("%1$8.5g", 1000.4213);

https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html


虽然precision 不包括点和指数长度——只计算尾数中的数字。

如果字符串明显更宽,则通过为点保留额外的位置并从小数部分删除额外的数字,这也可以解决。

String num = String.format("%1$ .5g", input);
if (num.length > 6) 
    num = num.substring(0, 2) + num.substring(7); //100300 => ' 1e+05'; 512.334 => ' 512.33'

数字的科学格式始终遵循一组严格的规则,因此如果始终包含符号,我们就不必在字符串中搜索点来从字符串中截取分数(或者,像上面的情况一样 - 用空格字符替换正数)。

【讨论】:

    猜你喜欢
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多