java – 将float转换为string并始终获取特定的字符串长度?

如何将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.util.Formatter documentaion:您可以使用g修饰符,精度字段将数字限制为特定的字符数,使用宽度字段将其填充到列宽.

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

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

虽然精度不包括点和指数长度 – 只计算尾数中的数字.

通过保持点的额外位置并从小数部分切割额外的数字,如果字符串明显更宽,也可以解决.

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'

数字的科学格式总是遵循严格的规则集,因此如果总是包含符号,我们就不必在字符串内搜索点以从字符串中删除分数(或者,如上所述 – 用空格字符替换为正数) .

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...