如何将 18 位双精度格式化为 10 字符串字符
Posted
技术标签:
【中文标题】如何将 18 位双精度格式化为 10 字符串字符【英文标题】:How to format 18 digit double to become 10 string character 【发布时间】:2018-10-16 12:57:11 【问题描述】:double pdouble= 3.3603335204002837E12;
String pstart= Double.toString(pdouble).replace(".", "") .trim()
String.format("%10d", pstart);
System.out.println("pstart"+pstart);
我能知道为什么它不起作用... 它显示这个:
线程“main”中的异常 java.util.IllegalFormatConversionException: d != java.lang.String at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4302) .我
希望有人能帮忙
【问题讨论】:
格式字符d
需要一个数字,而不是字符串。让format()
转换为字符串(但使用适当的格式字符),然后删除点。
你的意思是这样的.. pstart=String.format("%10d", pdouble); pstart.replace(".", "") //去掉左括号 .trim();
仍然错误和同样的问题发生
d
是错误的格式说明符。您在 cmets 中的代码不应显示与您的问题相同的错误。
【参考方案1】:
%d
用于int
。由于pstart
是字符串,请使用b
或s
。
String.format("%10s", pstart);
输出
33603335204002837E12
阅读Java String format()
但是,如果您只需要号码的前 10 位数字,请尝试使用 DecimalFormat
DecimalFormat d = new DecimalFormat("0000000000");
String number = d.format(pdouble);
输出
3360333520400
如果号码少于 10 位,这也会添加前导 0
s。
【讨论】:
不,我已经尝试过了..值变成了 33603335204002837E12...它只是删除了小数 @ranjithh 您只需要前 10 位数字吗?我已经编辑了我的答案。检查 结果变成 33603335204002 仍然不是 10,当我更改时只有 9 的 0 仍然有 12-14 字符...或者它是我的程序中的错误,因为我需要生成数千个双倍? 【参考方案2】:对于十进制数,需要使用“f”标志。
double pdouble= 3.3603335204002837E12;
System.out.println(String.format("%10f", pdouble));
这将打印一个最小长度为 10 个字符的字符串。
在此模式“%10f”中,宽度标志(例如 10)是最小字符数
宽度是要写入输出的最小字符数。对于行分隔符转换,宽度不适用;如果提供,将抛出异常。
来自Formatterjava 文档
【讨论】:
输出变成这样 3360333520400.2837888;仍然没有变成 10 个字符,也没有减少后面的小数点。无论如何,谢谢以上是关于如何将 18 位双精度格式化为 10 字符串字符的主要内容,如果未能解决你的问题,请参考以下文章