标签: decimalformat

在ColdFusion的DecimalFormat()函数中有什么用呢?如何获得正确的结果?

<cfset number1 = 20.5/80 * 100 />
<cfset number2 = 18.125 />
<cfset number3 = 6.875 />

<cfoutput>
DecimalFormat(#number1#): #DecimalFormat(number1)#<br />
DecimalFormat(#number2#): #DecimalFormat(number2)#<br />
DecimalFormat(#number3#): #DecimalFormat(number3)#
</cfoutput>
Run Code Online (Sandbox Code Playgroud)

输出:

DecimalFormat(25.625):25.62

DecimalFormat(18.125):18.13

DecimalFormat(6.875):6.88

产量不仅仅是产量:

DecimalFormat(25.625):25.63

DecimalFormat(18.125):18.13

DecimalFormat(6.875):6.88

看起来,作为数学计算结果的变量使得DecimalFormat()的行为有所不同.任何快速修复,无需深入研究java?

coldfusion decimalformat

5
推荐指数
1
解决办法
4642
查看次数

DecimalFormat子模式边界不能正常工作

我使用DecimalFormat创建一个总长度为6个字符的格式化小数.起初我使用了格式字符串new DecimalFormat("000.00")但这给了我一个负数的错误.添加减号并使第一个空格更大,导致-005.25而不是-05.25所希望的.

我已经能够使用以下代码解决此问题

DecimalFormat fmt;  
if(netAmt < 0){  
    fmt = new DecimalFormat("00.00");  
}else{  
    fmt = new DecimalFormat("000.00");  
}  

System.out.println(fmt.format(netAmt));
Run Code Online (Sandbox Code Playgroud)

但是DecimalFormat具有将;负数格式设置为不同于正数的字符.我无法正常工作.据我所知,以下代码应该像上面这样工作.

DecimalFormat fmt = new DecimalFormat("000.00;00.00");  

System.out.println(fmt.format(netAmt));
Run Code Online (Sandbox Code Playgroud)

结果是,之前的模式;用于负数和正数,导致-005.25错误保留.我究竟做错了什么?我误解了什么;是为了什么?

java decimalformat

5
推荐指数
2
解决办法
1905
查看次数

使用具有更多数字的Java Double.toString()样式格式(DecimalFormat不适用于低精度数字)

核心问题是我需要记录一系列双打,每个双打都有不同数量的有效数字.数字的变化有很大的数字.一些有0(例如5257),有些有2(例如1308.75),有些一直有7(例如124.1171875).基本上是小数点后0到7位有效数字之间的所有内容.

标准Double.toString()适用于所有内容,但有7位有效数字.这是一直到6位数字,有效数字都打印没有任何无关紧要的数字.但是对于那些有7位有效数字的人,toString()会将最后一位数字舍入.即

5257 -> "5257"
1308.75 -> "1308.75"
124.1171875 -> "124.117188"
Run Code Online (Sandbox Code Playgroud)

当然我尝试使用DecimalFormat("#.#######"),这解决了丢失有效数字的问题,但它为许多低精度双精度打印了无关紧要的数字.即

1308.75 -> "1308.7499998"
Run Code Online (Sandbox Code Playgroud)

这也是不可接受的,因为它浪费了大量的空间(通常每天记录> 2 GB的数据)和2)它使用日志弄乱了应用程序.

在识别有效数字时,与toString()相比,DecimalFormat似乎很糟糕,无论如何要修复它?我只想使用toString()样式处理有效数字,并将最大位数从6扩展到7.

有任何想法吗?谢谢

java precision double tostring decimalformat

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

如何使用十进制格式显示电话号码

您好我想使用DecimalFormat来显示:

8392472

839 24 72

我试过了

DecimalFormat dc = new DecimalFormat("000 00 00");
return dc.format(number);
Run Code Online (Sandbox Code Playgroud)

我也尝试过 "### ## ##"

java decimalformat

5
推荐指数
1
解决办法
1226
查看次数

Java - 即使在零中也始终保留两个小数位

我试图保留两个小数位,即使那时数字为零,使用DecimalFormatter:

DecimalFormat df = new DecimalFormat("#.00");

m_interest   = Double.valueOf(df.format(m_principal * m_interestRate));
m_newBalance = Double.valueOf(df.format(m_principal + m_interest - m_payment));
m_principal  = Double.valueOf(df.format(m_newBalance));
Run Code Online (Sandbox Code Playgroud)

但是对于某些值,这会给出两个小数位,而对于其他值则不会.我怎样才能解决这个问题?

java decimalformat

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

BigDecimal在Android 4.0.3中提供了具有本地化的NumberFormatException

我在我的应用程序中使用波斯语(locale-"fa")和Pashto(locale-"ps")语言进行本地化.当我尝试使用Decimal Foramt在BigDecimal中转换double值时,它在4.0.3中给出NumberFormatException波斯语.

以下是获取两位小数的代码:

public static String roundTwoDecimals(double d) {

    System.out.println("===================Amount in double "+d);
    DecimalFormat twoDForm = new DecimalFormat("#############.##");
    String format=twoDForm.format(d);
    System.out.println("===================Amount after formatting "+format);
    return new BigDecimal(twoDForm.format(d)).toPlainString();
}
Run Code Online (Sandbox Code Playgroud)

logcat的:

03-26 15:19:29.714: I/System.out(1475): ===================Amount in double 166308.37
03-26 15:19:29.723: I/System.out(1475): ===================Amount after formatting ?????????
Run Code Online (Sandbox Code Playgroud)

实际金额是166308.37,当我将语言改为波斯语("fa")并格式化时,它给出?????????了4.0.3中的金额.所以这个字符串无法转换为BigDecimal并给出NumberFormatException.

奇怪的是,除了4.0.3之外,它的工作原理非常好.

android localization bigdecimal decimalformat

5
推荐指数
1
解决办法
166
查看次数

android十进制格式为阿拉伯语,符号在数字的右侧

我正在尝试支持左语言的RTL,并且正在测试阿拉伯语(我对此一无所知)。

负号/正号应该位于数字的右侧还是左侧?我认为应该在左侧,但是当我使用Android的DecimalFormat将数字放入设备设置的语言环境中时,该符号会显示在右侧。

有没有人遇到过这种情况,知道如何解决?我能想到的最好是,如果它是负数,则用括号将其打印出来,这应该可以解决但不是理想的情况。

编辑

抱歉,代码总是有帮助的。如果我打印以下内容(经度为负):

DecimalFormat coord_df = new DecimalFormat("#.000000");
coord_df.format(loc.getLongitude())
Run Code Online (Sandbox Code Playgroud)

像这样印

##,######-
Run Code Online (Sandbox Code Playgroud)

#号是阿拉伯数字(如此处显示在东部阿拉伯行上的数字:http : //en.wikipedia.org/wiki/Eastern_Arabic_numerals

我需要在数字的正确边上得到负数(我相信这是左边)

我最终只是在需要弄乱显示数字(如此处的答案)时检查设备是否为RTL:android确定设备是否为从右到左的语言/布局

如果设备是RTL,则我使用带有负号的负子模式作为后缀,如下所示:

"#.000000,#.000000-"
Run Code Online (Sandbox Code Playgroud)

android decimalformat right-to-left

5
推荐指数
2
解决办法
1545
查看次数

在格式化的值中替换DecimalFormat的分组分隔符

我曾经习惯DecimalFormat df = new DecimalFormat("#,###.00");格式化BigDecimal.

现在,我想使用该格式化的值(比如它是'1 250,00')来创建new BigDecimal.我试过这个:

BigDecimal result = new BigDecimal(model.getValue().replace(",",".").replace(" ",""));
Run Code Online (Sandbox Code Playgroud)

但是space1 250和2之间的1到2不会被替换.我该如何解决?

例:

DecimalFormat df = new DecimalFormat("#,###.00");
BigDecimal example = new BigDecimal("1250");
String str = df.format(example);
System.out.println(str.replace(",",".").replace(" ",""));
Run Code Online (Sandbox Code Playgroud)

java bigdecimal decimalformat

5
推荐指数
2
解决办法
3749
查看次数

DecimalFormat在不同的机器上产生两种不同的结果

我正在分析DecimalFormat圆形一个BigDecimal数字和其他机器上的情况,它被截断.

我已经验证了两台机器上的所有配置(我假设它们都是相同的).我唯一知道的差异是JDK版本.

机器1在JDK1.6上运行.但是,我在机器1上尝试过与JDK1.7相同的操作,它与JDK1.6的工作方式相同.

机器2在JDK1.7上运行

以下是代码段:

DecimalFormat decimalFormat = new DecimalFormat("#,###.00");
BigDecimal anObject = new BigDecimal("3.8880");
String str = decimalFormat.format(((Number)anObject).doubleValue());
System.out.println(str);
Run Code Online (Sandbox Code Playgroud)

在机器1上结果是:3.39

在机器2上的结果是:3.38

java numbers bigdecimal number-formatting decimalformat

5
推荐指数
1
解决办法
156
查看次数

使用DecimalFormat获取不同数量的小数位

所以我想使用Decimal Format类来舍入数字:

double value = 10.555;

DecimalFormat fmt = new DecimalFormat ("0.##");

System.out.println(fmt.format(value));
Run Code Online (Sandbox Code Playgroud)

这里,变量value将四舍五入到2位小数,因为有两个#s.但是,我想要舍入value到未知的小数位数,由一个单独的整数表示numPlaces.有没有办法通过使用十进制格式化器来实现这一目标?

例如,如果numPlaces = 3value = 10.555,则value需要四舍五入到小数点后3位

java string decimalformat

4
推荐指数
2
解决办法
3026
查看次数