如何将 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 是字符串,请使用bs

String.format("%10s", pstart);

输出

33603335204002837E12

阅读Java String format()


但是,如果您只需要号码的前 10 位数字,请尝试使用 DecimalFormat

DecimalFormat d = new DecimalFormat("0000000000");
String number = d.format(pdouble);

输出

3360333520400

如果号码少于 10 位,这也会添加前导 0s。

【讨论】:

不,我已经尝试过了..值变成了 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 字符串字符的主要内容,如果未能解决你的问题,请参考以下文章

如何将双精度值格式化为点后两位小数且分隔符为千位的字符串?

在 Visual Studio 中以字节数组形式将 64 位双精度转换为 80 位双精度

函数将双精度值格式化为字符串

使用自定义组和小数分隔符将数字格式化为字符串而不更改精度

如何将数字格式化为货币字符串

如何使用 jq 将 JSON 字符串格式化为表格?