问题描述
需要结果符号,除了0.0d。即:
-123.45d - >-123.45,
123.45d - >+123.45,
0.0d - >0。
我在DecimalFormat的实例上调用
所以这会给我们: -1234.5 和 1234.5
现在,要将+添加到正数,我使用
$ b
因此
Need result with sign, except for 0.0d. Ie:
-123.45d -> "-123.45", 123.45d -> "+123.45", 0.0d -> "0".
I invoke format.setPositivePrefix("+") on the instance of DecimalFormat to force the sign in the result for positive inputs.
I'm sure there is a more elegant way, but see if this works?
import static org.junit.Assert.assertEquals; import java.text.ChoiceFormat; import java.text.DecimalFormat; import java.text.FieldPosition; import java.text.NumberFormat; import java.text.ParsePosition; import org.junit.Test; public class NumberFormatTest { @Test public void testNumberFormat() { NumberFormat nf = new MyNumberFormat(); assertEquals("-1234.4", nf.format(-1234.4)); assertEquals("0.0", nf.format(0)); assertEquals("+0.3", nf.format(0.3)); assertEquals("+12.0", nf.format(12)); } } class MyNumberFormat extends NumberFormat { private DecimalFormat df = new DecimalFormat("0.0#"); private ChoiceFormat cf = new ChoiceFormat(new double[] { 0.0, ChoiceFormat.nextDouble(0.0) }, new String[] { "", "+" }); @Override public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) { return toAppendTo.append(cf.format(number)).append(df.format(number)); } @Override public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos) { return toAppendTo.append(cf.format(number)).append(df.format(number)); } @Override public Number parse(String source, ParsePosition parsePosition) { throw new UnsupportedOperationException(); } }
According to DecimalFormat
Hence new DecimalFormat("0.0#") is equivalent to new DecimalFormat("0.0#;-0.0#")
So this would give us: -1234.5 and 1234.5
Now, to add the '+' to positve numbers, I use a ChoiceFormat
- 0.0 <= X < ChoiceFormat.nextDouble(0.0) will use a choice format of "". ChoiceFormat.nextDouble(0.0) is the smallest number greater than 0.0.
- ChoiceFormat.nextDouble(0.0) <= X < 1 will use a choice format of "+".
Hence
- Double.NEGATIVE_INFINITY <= X < 0 will use "".
- 1 <= X < Double.POSITIVE_INFINITY will use "+".
这篇关于我如何使java.text.NumberFormat格式0.0d为“0”而不是“+0”?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!