专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »DotNet » js数字格式化:.NET 中的数字格式化,日期格式化 »正文

js数字格式化:.NET 中的数字格式化,日期格式化

来源: 发布时间:星期四, 2009年2月12日 浏览:104次 评论:0


基本内容是:可以在 Console.WriteLine(以及 String.Format它被 Console.WriteLine )中格式串内括号中放入非索引数字内容格式规范标准完整形式如下:

{index [, width][:format]}

其中index 是此格式引用格式串的后参数从零开始计数;width(如果有话)是要设置格式字段宽度(以空格计)width 取正数表示结果右对齐取负数则意味着数字在字段中左对齐(请参阅下面前两个举例)

format 是可选项其中包含有关设置类型格式格式介绍说明如果对象实现 IFormattableformat 就会传递给对象 Format 思路方法(在 Beta 2 和后续版本中该思路方法签名变为 (, IFormatProvider)但功能不变)如果对象不实现 IFormattable就会 Object.而忽略 format

另请注意在 Beta 1 中不区分当前语言 在 Beta 2 和后续版本中“将”区分语言例如对于用“.”分隔千位用“,”分隔小数国家1,234.56 将会格式化成 1.234,56如果您需要结果无论在什么语言下都是就请使用 CultureInfo.InvariantCulture 作为语言

若要获取有关格式完整信息请查阅“.NET 框架开发人员指南”中格式概述(英文)

数字格式
请注意数字格式是区分语言:分隔符以及分隔符的间空格还有货币符号都是由语言决定 — 默认情况下是您计算机上默认语言默认语言和执行线程相关可以通过 Thread.CurrentThread.CurrentCulture 了解和设置语言有几种思路方法可以不必仅为种给定格式操作就立即更改语言

内置类型字母格式
种格式命令以单个字母开头表示下列设置:

G—常规E 或 F 中较短

F—浮点数常规表示法

E—用 E 表示法表示浮点数(其中E 代表 10 次幂)

N—带有分隔符浮点数(在美国为逗号)

C—货币带有货币符号和分隔符(在美国为逗号)

D—十进制数仅用于整型

X—十 6进制数仅用于整型

字母可以后跟个数字根据字母区别该数字可以表示总位数、有效位数或小数点后面位数

下面是字母格式些举例:

double pi = Math.PI;
double p0 = pi * 10000;
i = 123;

Console.WriteLine("浮点格式无分隔符(逗号)");
Console.WriteLine("pi, Left {0, -25}", pi); // 3.1415926535897931
Console.WriteLine("p0, Rt. {0, 25}", p0); // 3.1415926535897931
Console.WriteLine("pi, E {0, 25:E}", pi); // 3.1416E+000

Console.WriteLine("使用 E 和 F 格式小数点后保留 n(此处为 4)位");
Console.WriteLine("pi, E4 {0, 25:E4}", pi); // 3.1416E+000
Console.WriteLine("pi, F4 {0, 25:F4}", pi); // 3.1416
Console.WriteLine("使用 G 格式保留 4 位有效数字——如果需要请使用 E 格式");
Console.WriteLine("pi, G4 {0, 25:G4}", pi); // 3.142
Console.WriteLine("p0, G4 {0, 25:G4}", p0); // 3.142E4

Console.WriteLine("N 和 C 格式带有逗号(分隔符)" +
"默认小数点后保留两位 4舍 5入");
Console.WriteLine("p0, N {0, 25:N}", p0); // 31,415.93
Console.WriteLine("p0, N4 {0, 25:N4}", p0); // 31,415.9265
Console.WriteLine("p0, C {0,25:C}", pi); // $3.14

Console.WriteLine("D 和 X 格式仅用于整型" +
"非整型将产生格式异常——X 指十 6进制");
Console.WriteLine("i, D {0, 25:D}", i ); // 123
Console.WriteLine("i, D7 {0, 25:D7}", i ); // 0000123
Console.WriteLine("i, X {0, 25:X}", i ); // 7B
Console.WriteLine("i, X8 {0, 25:X8}", i ); // 0000007B
图片格式
和字母格式区别format 可以包含“图片格式”下面是从代码中摘录几个例子(这类似于 Basic 中“Pr Using”语句)图片格式功能甚至包括以区别方式设置负数、正数和零格式能力还有几个图片格式功能下面举例中未包括在内有关详细信息请参阅“.NET 框架开发人员指南”或文档中主题图片格式数字串(英文)

在下例中您将注意到好心博士既使用了“#”又使用了“0”如果相应数字是前导零或尾随零“#”就会替换为空值无论相应数字值如何“0”都会被替换为零 — 因此数字将会被零填补句号(如果有话)表示小数分隔符位置

那么为什么要同时使用这些字母比如“###0.##”? 如果要设置格式值恰好为零“#” 图片就被替换为“无”(连零也不是)您可能“总是”希望在小数点左边至少有个“0”否则如果值为零字段就没有输出换言的仅包含“#”个“0”也没有格式常被认为是个编程

逗号有两种使用方法:如果个逗号或组逗号紧跟在句号左边(或者没有句号时在结尾)它们就会告诉格式化分隔 10 ** (3 * n) 所显示数字其中n 是逗号个数换言的数字按千位、百万位、十亿位等分隔

如果逗号右侧至少有个“0”或“#”占位符它就会告诉格式化在各数位组的间放置适当组分隔符(在美国为逗号)(在美国每 3个数位算)

可以设置百分比格式思路方法是在图片中放入“%”“%”将在指定位置显示在显示前数字将被乘以 100(这样0.28 就变成了 28%)

如果希望将图片格式用于指数表示法可以指定“e”或“E”后跟加号或减号再后跟任意个零比如“E+00”或“e-000”如果使用“e”则显示小写“e” 如果使用“E”则显示大写“E” 如果使用加号则指数符号总是出现如果使用减号则符号只有在指数为负数时才会显示(Beta 1 版在处理“-”时有问题该符号会导致负号总是出现)

根据要设置格式数字符号还有个条件格式在格式串中仅包含两个或 3个独立格式它们由分号分隔如果有两个格式则第个将用于非负数第 2个用于负数如果有 3个格式则第个将用于正数第 2个用于负数第 3个用于零

可以在格式串中包含文字如果所需具有特殊意义请在其前面使用反斜杠符号使其“转义”例如如果希望在不乘以 100 情况下显示百分比符号就可以在数字前面使用反斜杠(在 C 和 C# 中必须使用两个反斜杠)比如“#0.##\\%”(如果正在使用 C#就可以使用极酷逐字串文字比如@"#0.##\%")或者也可以将串放入单引号或双引号中以避免将其解释为格式命令在 Beta 2 及更高版本中可以通过使用双括号从而在格式串中包含文字括号



下面是有关图片格式些举例:

long m34 = 34000000; // 34,000,000
Console.WriteLine("几种图片格式");
Console.WriteLine("如果没有数位0 将打印 0;" +
"诸如 i: 文字总是打印");
Console.WriteLine("\t句点代表小数分隔符位置");
Console.WriteLine("i, i: 0000.0 {0, 10:i: 0000.0}", i); //
i:0123.0
Console.WriteLine("如果没有有效数字 # 将不显示" +
"逗号意味着放入分隔符");
Console.WriteLine("请确保在数字图片中至少使用个 0");
Console.WriteLine("p0, ##,##0.# {0, 10:##,##0.#}",-p0); // -31,415.9
Console.WriteLine("m34, 0,, {0, 10:0,, 百万}", m34); // 34 百万
Console.WriteLine("p0, #0.#E+00 {0, 10:#0.#E+00}", p0); // 31.4E+03
Console.WriteLine("% 乘以 100 并打印百分号");
Console.WriteLine("pi, ###0.##% {0, 10:###0.##%}", pi); // 314.16%
Console.WriteLine(" \\ 而没有进行乘法运算" +
"(注意:两个反斜线!)");
Console.WriteLine("pi, ###0.##\\\\% {0, 10:###0.##\\%}", pi); // 3.14%
Console.WriteLine("和 C# 逐字串相同");
Console.WriteLine(@"pi, ###0.##\\% {0, 10:###0.##\%}", pi); // 3.14%
Console.WriteLine("10, '#'#0 {0, 10:'#'#0}", 10); // #10
Console.WriteLine("基于符号条件格式");
Console.WriteLine("如果是 0 或正数打印 #如果是负数打印 (#)");
Console.WriteLine("-5 0;(0) {0, 10:0;(0)}", -5); // (5)
Console.WriteLine("如果是正数打印 #如果是负数打印 -#如果是 0 打印 zip");
Console.WriteLine(" 0 0;-0;zip {0, 10:0;-0;zip}", 0); // zip
如您所见格式功能非常强大

格式工作方式
文档中举例对所传递对象类型变量 Format 思路方法对这些 Format 思路方法仅传递格式规范标准 format 部分而不传递 index 和 width(在 Beta 2 中对 Format 将改为对 )

index 和 width 由 String.Format(它被 Console.Write 和 Console.WriteLine )使用以获得 Format 正确对象以及将该结果左或右对齐(顺便说如果要设置格式对象不实现 IFormattable(并因此 Format 思路方法)String.Format 将对象 思路方法而忽略 format)

换言的Console.WriteLine String.Format传递向它传递所有参数String.Format 分析查找“{”找到该它将分析子串直到第个“}”为止以确定 index 数、width 和 format然后它按照 index 访问相应参数其 Format 思路方法传递“{}”段中 format 部分(如果参数对象不实现 IFormattable则被)

无论是实现还是不实现都会返回并且 String.Format 在继续分析格式串的前会将其和结果串连接的后String.Format 将生成带格式串返回给 Console.WriteLine由 Console.WriteLine 进行显示

对于 Beta 2 及更高版本对象 Format 思路方法(它是 IFormattable 中 Format 思路方法)被 所替代 获取个格式串和个 IFormatProvider(或 null)但 String.Format 仍存在因此这些将不改变

自定义格式
您自己也可以编写格式化用于自己类型或作为内置类型自定义格式化如“.NET 框架开发人员指南”中自定义 Format 思路方法所介绍说明那样如果编写内置类型自定义格式化就不能从 Console.WriteLine 中使用它但可以通过 String.Format 重载而使用它String.Format 重载将采用 IServiceObjectProvider(在 beta 2 及更高版本中称为 IFormatProvider)作为参数

日期和时间格式
您将记起个叫做 DateTime 用于保存日期和时间像您所猜想那样有大量思路方法可供设置 DateTime 对象格式:仅日期、仅时间、世界时或本地时、若干种日/月/年顺序甚至可分类日期和时间格式是区分语言



还可以使用自定义格式串来设置 DateTime 对象格式这种串将包含由某些字母组成区分大小写以表示日期和时间各个区别部分如星期几、几号、月份、年份、纪元、小时、分钟、秒或时区这些部分中有许多具有多种格式例如M 是没有前导零数字月份MM 是有前导零数字月份MMM 是 3个字母月份缩写MMMM 是所在国家语言对应完整月份名称拼写在“.NET 框架参考”中可以找到自定义和标准格式完整列表

下面是有关日期和时间格式个举例:

Console.WriteLine("标准格式");
// 后面“分析”中会有更多信息
DateTime dt = DateTime.Parse("2001 年 1 月 1 日12:01:00am");
Console.WriteLine("d: {0:d}", dt); // 1/1/2001
Console.WriteLine("D: {0:D}", dt); // 2001 年 1 月 1 日星期
Console.WriteLine("f: {0:f}", dt); // 2001 年 1 月 1 日星期 12:01 AM
Console.Write("F: {0:F}", dt); // 2001 年 1 月 1 日星期 12:01:00 AM
Console.WriteLine;
Console.WriteLine("g: {0:g}", dt); // 1/1/2001 12:01 AM
Console.WriteLine("G: {0:G}", dt); // 1/1/2001 12:01:00 AM
Console.WriteLine("M/m: {0:M}", dt); // 2001 年 1 月
Console.WriteLine("R/r: {0:R}", dt); // 2001 年 1 月 1 日星期 08:01:00 GMT
Console.WriteLine("s: {0:s}", dt); // 2001-01-01T00:01:00
Console.WriteLine("t: {0:t}", dt); // 12:01 AM
Console.WriteLine("T: {0:T}", dt); // 12:01:00 AM
Console.WriteLine("u: {0:u}", dt); // 2001-01-01 08:01:00Z
Console.Write("U: {0:U}", dt); // 2001 年 1 月 1 日星期 8:01:00 AM
Console.WriteLine;
Console.WriteLine("Y/y: {0:Y}", dt); // 2001 年 1 月
Console.WriteLine("自定义格式");
// 对作为格式使用必须“转义”—此处为 t 和 z
// 同时使用引号(在文字串中)和反斜杠
Console.WriteLine(@"dddd, dd MMMM yyyy"" at ""HH:mm:ss in \zone zzz:");
Console.WriteLine(@"{0:dddd, dd MMMM yyyy"" at ""HH:mm:ss in \zone zzz}",
dt);
// 2001 年 1 月 1 日星期 00:01:00 于时区 -08:00http://www.microsoft.com/china/MSDN/library/archives/library/welcome/dsmsdn/drguinet03292001.asp
:using ;
using .Collections.Generic;
using .Text; ConsoleApplication1
{
Program
{
void Main( args)
{
double pi = Math.PI;
double p0 = pi * 10000;
i = 123;
long m34 = 34000000; // 34,000,000
Console.WriteLine("几种图片格式");
Console.WriteLine("如果没有数位0 将打印 0;" +
"诸如 i: 文字总是打印");
Console.WriteLine("\t句点代表小数分隔符位置");
Console.WriteLine("i, i: 0000.0 {0, 10:i: 0000.0}", i); // i:0123.0
Console.WriteLine("如果没有有效数字 # 将不显示" +
"逗号意味着放入分隔符");
Console.WriteLine("请确保在数字图片中至少使用个 0");
Console.WriteLine("p0, ##,##0.# {0, 10:##,##0.#}", -p0); // -31,415.9
Console.WriteLine("m34, 0,, {0, 10:0,, 百万}", m34); // 34 百万
Console.WriteLine("p0, #0.#E+00 {0, 10:#0.#E+00}", p0); // 31.4E+03
Console.WriteLine("% 乘以 100 并打印百分号");
Console.WriteLine("pi, ###0.##% {0, 10:###0.##%}", pi); // 314.16%
Console.WriteLine("pi, ###0.##% {0, 10:#######0.##%}", pi); // 314.16%
Console.WriteLine(" \\ 而没有进行乘法运算" +
"(注意:两个反斜线!)");
Console.WriteLine("pi, ###0.##\\\\% {0, 10:###0.##\\%}", pi); // 3.14%
Console.WriteLine("和 C# 逐字串相同");
Console.WriteLine(@"pi, ###0.##\\% {0, 10:###0.##\%}", pi); // 3.14%
Console.WriteLine("10, '#'#0 {0, 10:'#'#0}", 10); // #10
Console.WriteLine("10, '#'#0 {0, 10:##0}", 10); // 10
Console.WriteLine("基于符号条件格式");
Console.WriteLine("如果是 0 或正数打印 #如果是负数打印 (#)");
Console.WriteLine("-5 0;(0) {0, 10:0;(0)}", -5); // (5)
Console.WriteLine("如果是正数打印 #如果是负数打印 -#如果是 0 打印 zip");
Console.WriteLine(" 0 0;-0;zip {0, 10:0;-0;zip}", 0); // zip
Console.ReadLine;
}
}
}
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: