Java DecimalFormat 科学记数法问题
我正在使用 Java 的 DecimalFormat类以科学记数法打印数字。 然而,我有一个问题。 我需要字符串的长度固定,无论其值如何,而十的幂的符号将其丢弃。 目前,我的格式如下:
DecimalFormat format = new DecimalFormat("0.0E0");
这给出了以下组合:1.0E1、1.0E-1、-1.0E1 和 -1.0E-1。
我可以使用 setPositivePrefix 来获取:+1.0E1、+1.0E-1、-1.0E1 和 -1.0E-1 或我喜欢的任何内容,但它不会影响力量!
有什么方法可以做到这一点,以便我可以拥有固定长度的字符串吗? 谢谢!
编辑:啊,那么没有办法使用 Java 现有的 DecimalFormat API 来做到这一点吗? 感谢您的建议! 我想我可能必须子类化DecimalFormat,因为我受到已经存在的接口的限制。
I'm using Java's DecimalFormat class to print out numbers in Scientific Notation. However, there is one problem that I have. I need the strings to be of fixed length regardless of the value, and the sign on the power of ten is throwing it off. Currently, this is what my format looks like:
DecimalFormat format = new DecimalFormat("0.0E0");
This gives me the following combinations: 1.0E1, 1.0E-1, -1.0E1, and -1.0E-1.
I can use setPositivePrefix to get: +1.0E1, +1.0E-1, -1.0E1, and -1.0E-1, or whatever I like, but it doesn't affect the sign of the power!
Is there any way to do this so that I can have fixed length strings? Thanks!
Edit: Ah, so there's no way to do it using Java's existing DecimalFormat API? Thanks for the suggestions! I think I may have to subclass DecimalFormat because I am limited by the interface that is already in place.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这是一种方法。 也许是做作,但它有效...
或者你可以子类 DecimalFormat,但我发现不从具体类子类化通常更干净。
Here's one way. Hokey, perhaps, but it works...
Alternatively you could subclass DecimalFormat, but I find it generally cleaner not to subclass from concrete classes.
您可以使用
printf()
来代替:输出:
如果您需要输出到
String
来代替,您可以使用 Java 格式化打印 (sprintf) 来执行此操作。编辑:哇,那个
PrintfFormat()
东西很大而且似乎没有必要:我从 将 OutputStream 转换为字符串。
Could you use
printf()
instead:Output:
If you need to output to a
String
instead, you can use the information provided at Formatted Printing for Java (sprintf) to do that.EDIT: Wow, that
PrintfFormat()
thing is huge and seems to be unnecessary:I got the idea for the above code from Get an OutputStream into a String.
如何使用?
请参阅
formatTest
方法。if (value.compareTo(positive) == 1 || value.compareTo(negative) == -1)
对于非常大的数字很有用How to use?
See
formatTest
method.if (value.compareTo(positive) == 1 || value.compareTo(negative) == -1)
is useful for very large numbers为什么不使用“0.0E+0”模式来代替? 请注意最后一个零之前的加号。
Why not use "0.0E+0" pattern instead? Note the plus sign before last zero.
这对我有用,
This worked form me,