本文介绍了我如何使java.text.NumberFormat格式0.0d为“0”而不是“+0”?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

需要结果符号,除了0.0d。即:

 
-123.45d - >-123.45,
123.45d - >+123.45,
0.0d - >0。

我在DecimalFormat的实例上调用

所以这会给我们: -1234.5 和 1234.5



现在,要将+添加到正数,我使用
$ b


  • 0.0 将使用的选择格式。 ChoiceFormat.nextDouble(0.0)是最大的数字,大于 0.0 。

  • ChoiceFormat.nextDouble(0.0)< = X< 1 将使用+的选择格式。



因此


  • Double.NEGATIVE_INFINITY 将会使用

  • 1 会使用+。


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”?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-27 10:46