我们知道double类型在进行处理时会涉及到精度丢失问题比如
double d=100*1.005;
结果d的结果为100.49999999999999
怎么解决这种问题呢,用DecimalFormat,它对double类型的进行四舍五入处理用法如下:
DecimalFormat df=new DecimalFormat(pattern);
String nums=df.format(value);
这里给pattern:”.00“
value:100*1.005
nums值为:100.50
pattern常用的千分号显示:#,##0.00 (为什么个位数用0不用#,因为如果df.format(0),用#的话0显示为空,结果为.00而用0的话显示0.00)
pattern设置可以参考下面:
Symbol | Location | Localized? | Meaning |
---|---|---|---|
0 | Number | Yes | Digit |
# | Number | Yes | Digit, zero shows as absent |
. | Number | Yes | Decimal separator or monetary decimal separator |
- | Number | Yes | Minus sign |
, | Number | Yes | Grouping separator |
E | Number | Yes | Separates mantissa and exponent in scientific notation. Need not be quoted in prefix or suffix. |
; | Subpattern boundary | Yes | Separates positive and negative subpatterns |
% | Prefix or suffix | Yes | Multiply by 100 and show as percentage |
\u2030 | Prefix or suffix | Yes | Multiply by 1000 and show as per mille |
¤ (\u00A4 ) | Prefix or suffix | No | Currency sign, replaced by currency symbol. If doubled, replaced by international currency symbol. If present in a pattern, the monetary decimal separator is used instead of the decimal separator. |
' | Prefix or suffix | No | Used to quote special characters in a prefix or suffix, for example, "'#'#" formats 123 to "#123" . To create a single quote itself, use two in a row: "# o''clock" . |
在c#中,可以参考http://msdn.microsoft.com/zh-cn/library/0c899ak8(v=vs.110).aspx#SpecifierTh
“,”字符用作组分隔符和数字比例换算说明符。
-
组分隔符:如果在两个设置数字的整数位格式的数字占位符(0 或 #)之间指定一个或多个逗号,则在输出的整数部分中的每个数字组之间插入一个组分隔符字符。
当前 NumberFormatInfo 对象的 NumberGroupSeparator 和 NumberGroupSizes 属性将确定用作数字组分隔符的字符以及每个数字组的大小。 例如,如果使用字符串“#,#”和固定区域性对数字 1000 进行格式化,则输出为“1,000”。
-
数字比例换算说明符:如果在紧邻显式或隐式小数点的左侧指定一个或多个逗号,则对于每个逗号,将要设置格式的数字除以 1000。 例如,如果使用字符串“0,,”对数字 100000000 进行格式化,则输出为“100”。
可以在同一格式字符串中使用组分隔符和数字比例换算说明符。 例如,如果使用字符串“#,0,,”和固定区域性对数字 1000000000 进行格式化,则输出为“1,000”。
下面的示例演示如何使用逗号作为组分隔符。
那么类似java的#,##0.00,c#中可以写成#,0.00
8.ToString("#,0.00") 输出:8.00