标签: decimalformat

为什么在此代码中不遵循模式字符串?

当执行以下代码时:

DecimalFormat eNotation1 = new DecimalFormat("#0.###E0");   
System.out.println(eNotation1.format(123.456789)); 
Run Code Online (Sandbox Code Playgroud)

我的预期输出是;

1.235E2

代替,

1.2346E2

被印刷了。

为什么输出1.2346E2

我知道我可以使用一种方法,例如setMaximumFractionDigits()是否只想设置小数点后的最大位数,但是我只是想了解为什么输出是1.2346E2

java scientific-notation decimalformat

15
推荐指数
1
解决办法
1450
查看次数

通过移动小数来停止带有百分号的DecimalFormat

有没有办法阻止DecimalFormat对象自动将小数位移到右边两个位置?

这段代码:

double d = 65.87;
DecimalFormat df1 = new DecimalFormat(" #,##0.00");
DecimalFormat df2 = new DecimalFormat(" #,##0.00 %");
System.out.println(df1.format(d));
System.out.println(df2.format(d));
Run Code Online (Sandbox Code Playgroud)

生产:

65.87
6,587.00 %
Run Code Online (Sandbox Code Playgroud)

但我希望它产生:

65.87
65.87 %
Run Code Online (Sandbox Code Playgroud)

java decimalformat

14
推荐指数
2
解决办法
5822
查看次数

DecimalFormat转换非数字的数字

使用这种数字时,使用DecimalFormat不会产生任何解析异常:

123hello

这显然不是一个数字,并转换为123.0值.我该如何避免这种行为?

作为旁注,hello123确实给出了一个例外,这是正确的.

谢谢,马塞尔

java decimalformat parseexception

13
推荐指数
1
解决办法
1677
查看次数

如何使用DecimalFormat格式化钱?

输入看起来像8.7000000,我想格式化它看起来像8.70 EUR.我考虑过使用DecimalFormat课程:

Double number = Double.valueOf(text);

DecimalFormat dec = new DecimalFormat("#.## EUR");
String credits = dec.format(number);

TextView tt = (TextView) findViewById(R.id.creditsView);
tt.setText(credits);
Run Code Online (Sandbox Code Playgroud)

结果是8.7 EUR.如何告诉格式化程序后面有两位数.

java android decimalformat

13
推荐指数
2
解决办法
3万
查看次数

DecimalFormat和Double.valueOf()

我想在我的double值的十进制分隔符之后摆脱不必要的符号.我是这样做的:

DecimalFormat format = new DecimalFormat("#.#####");
value = Double.valueOf(format.format(41251.50000000012343));
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此代码时,它会抛出:

java.lang.NumberFormatException: For input string: "41251,5"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
    at java.lang.Double.valueOf(Double.java:447)
    at ...
Run Code Online (Sandbox Code Playgroud)

正如我所看到的Double.valueOf()那样"11.1",对于字符串很有效,但它会像字符串那样窒息"11,1".我该如何解决这个问题?是否有更优雅的方式

Double.valueOf(format.format(41251.50000000012343).replaceAll(",", "."));
Run Code Online (Sandbox Code Playgroud)

有没有办法覆盖类的默认小数分隔符值DecimalFormat?还有其他想法吗?

java number-formatting decimalformat

12
推荐指数
5
解决办法
5万
查看次数

Java - Decimal Format.parse返回具有指定小数位数的double值

我希望能够在格式字符串中给出一些小数位,将字符串转换为Double.所以"###,## 0.000"应该给我一个Double到3的小数位.

编辑 - 为发生的事情添加了更多信息

用户在UI中输入值 - 输入到String中.规则是此值限制为3位小数.底层代码将值存储在数据库中,然后在计算中使用.因此,尾随小数位将导致计算略微超出预期.

我有以下代码:

try {
        // output current locale we are running under (this happens to be "nl_BE")
        System.out.println( "Current Locale is " + Locale.getDefault().toString() );

        // number in Central European Format with a format string specified in UK format
        String numberCE = "1,234567"; // 1.234567
        String formatUK = "###,##0.000";

        // do the format
        DecimalFormat formatterUK = new DecimalFormat( formatUK );
        Double valCEWithUKFormat = formatterUK.parse( numberCE ).doubleValue();

        // I want …
Run Code Online (Sandbox Code Playgroud)

java parsing decimal rounding decimalformat

12
推荐指数
2
解决办法
6万
查看次数

使用DecimalFormat格式化数字

我正在尝试使用DecimalFormat格式化价格,但这不适用于所有变体.

DecimalFormat df = new DecimalFormat("0.##")
df.format(7.8)
df.format(85.0)
Run Code Online (Sandbox Code Playgroud)

版画

7.80
Run Code Online (Sandbox Code Playgroud)

85
Run Code Online (Sandbox Code Playgroud)

但"7.79999"格式为"7.8",而不是"7.80".我试过这样做

DecimalFormat df = new DecimalFormat("0.00")
Run Code Online (Sandbox Code Playgroud)

强制两个dp,但"85.0"格式化为"85.00"而不是"85"!

有没有办法捕捉所有变化,以便价格打印为#,##或#.##?例如:

5,55,5.55,5.50,500,500.40

java decimalformat

12
推荐指数
2
解决办法
7万
查看次数

在Java中使用DecimalFormat进行舍入

让我们看看Java中的以下语句.

System.out.println(new DecimalFormat("0").format(2.4)); //returns 2

System.out.println(new DecimalFormat("0").format(2.5)); //returns 2  <---Concentrate here
System.out.println(Math.round(2.5));                    //returns 3

System.out.println(new DecimalFormat("0").format(2.6)); //returns 3
System.out.println(new DecimalFormat("0").format(3.5)); //returns 4
Run Code Online (Sandbox Code Playgroud)

在上述陈述中,除以下情况外,所有其他情况都很明显.

System.out.println(new DecimalFormat("0").format(2.5));
Run Code Online (Sandbox Code Playgroud)

它应该返回,3但它返回2.怎么样?

java decimalformat

11
推荐指数
2
解决办法
2万
查看次数

在不修改小数的情况下将逗号(分组分隔符)添加到数字?

我正在尝试格式化字符串以在3位组之间添加逗号

例如:

1200.20 >> 1,200.20
15000   >> 15,000
Run Code Online (Sandbox Code Playgroud)

我正在试图弄清楚如何用DecimalFormat做到这一点,到目前为止我一直在使用我自己的一个看起来过于复杂的脚本.我无法弄清楚如何做到这一点,使用#只隐藏尾随零并使用0将它们添加到数字中.

这就是我现在正在尝试的:

DecimalFormat df = new DecimalFormat("###,###.####", new DecimalFormatSymbols(Locale.US));
resultStr = df.format(Double.valueOf(resultStr));
Run Code Online (Sandbox Code Playgroud)

我敢肯定它一定很容易,但我不知道该怎么做.我不需要使用DecimalFormat,我只是认为这将是更简单的方法.如何在不修改小数的情况下简单地添加逗号?

java decimalformat

11
推荐指数
2
解决办法
3万
查看次数

为什么DecimalFormat".#"和"0#"在23.0上有不同的结果?

为什么要java.text.DecimalFormat评估以下结果:

new DecimalFormat("0.#").format(23.0)        // result: "23"

new DecimalFormat(".#").format(23.0)         // result: "23.0"
Run Code Online (Sandbox Code Playgroud)

我希望结果23在两种情况下都是如此,因为特殊字符#省略了零.主要特征如何0影响分数部分?(尝试将其与javadoc中给出的BNF匹配/理解,但未能这样做.)

java decimalformat

11
推荐指数
1
解决办法
301
查看次数