当执行以下代码时:
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
有没有办法阻止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) 使用这种数字时,使用DecimalFormat不会产生任何解析异常:
123hello
这显然不是一个数字,并转换为123.0值.我该如何避免这种行为?
作为旁注,hello123确实给出了一个例外,这是正确的.
谢谢,马塞尔
输入看起来像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.如何告诉格式化程序后面有两位数.?
我想在我的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?还有其他想法吗?
我希望能够在格式字符串中给出一些小数位,将字符串转换为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) 我正在尝试使用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中的以下语句.
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.怎么样?
我正在尝试格式化字符串以在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.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匹配/理解,但未能这样做.)