C# string Format

article/2025/11/5 20:00:28

使用C#格式化字符串

 

 

转载自博客园,原文连接:https://www.cnblogs.com/FlyingBread/archive/2007/01/18/620287.html,向原文作者献上敬意

 1 前言

   如果你熟悉Microsoft Foundation Classes(MFC)的CString,Windows Template Library(WTL)的CString或者Standard Template Library(STL)的字符串类,那么你对String.Format方法肯定很熟悉。在C#中也经常使用这个方法来格式化字符串,比如下面这样:

int x = 16;
decimal y = 3.57m;
string h = String.Format( "item {0} sells at {1:C}", x, y );
Console.WriteLine(h);


在我的机器上,可以得到下面的输出:

item 16 sells at ¥3.57


也许你的机器上的输出和这个不太一样。这是正常的,本文稍后就会解释这个问题。

   在我们日常使用中,更多的是使用Console.WriteLine方法来输出一个字符串。其实String.Format和Console.WriteLine有很多共同点。两个方法都有很多重载的格式并且采用无固定参数的对象数组作为最后一个参数。下面的两个语句会产生同样的输出。

Console.WriteLine( "Hello {0} {1} {2} {3} {4} {5} {6} {7} {8}"12345.67true'Q'4567'8');
string u = String.Format("Hello {0} {1} {2} {3} {4} {5} {6} {7} {8}"12345.67true'Q'4567'8');
Console.WriteLine(u);


输出如下:

Hello 123 45.67 True Q 4 5 6 7 8
Hello 123 45.67 True Q 4 5 6 7 8


2 字符串格式

String.Format和WriteLine都遵守同样的格式化规则。格式化的格式如下:"{ N [, M ][: formatString ]}", arg1, ... argN,在这个格式中:

1) N是从0开始的整数,表示要格式化的参数的个数

2) M是一个可选的整数,表示格式化后的参数所占的宽度,如果M是负数,那么格式化后的值就是左对齐的,如果M是正数,那么格式化后的值是右对齐的

3) formatString是另外一个可选的参数,表示格式代码

argN表示要格式化的表达式,和N是对应的。

如果argN是空值,那么就用一个空字符串来代替。如果没有formatString,那么就用参数N对应的ToString方法来格式化。下面的语句会产生同样的输出:

public class TestConsoleApp
{
    
public static void Main(string[] args)
    {
        Console.WriteLine(
123);
        Console.WriteLine(
"{0}"123);
        Console.WriteLine(
"{0:D3}"123);
    }
}


输出是:

123
123
123


也可以通过String.Format得到同样的输出。

string s = string.Format("123");
string t = string.Format("{0}"123);
string u = string.Format("{0:D3}"123);
Console.WriteLine(s);
Console.WriteLine(t);
Console.WriteLine(u);


因此有如下结论:

(,M)决定了格式化字符串的宽度和对齐方向

(:formatString)决定了如何格式化数据,比如用货币符号,科学计数法或者16进制。就像下面这样:

Console.WriteLine("{0,5} {1,5}"123456);      // 右对齐
Console.WriteLine("{0,-5} {1,-5}"123456);    // 左对齐


输出是

123   456
123   456


也可以合并这些表达式,先放一个逗号,再放一个冒号。就像这样:

Console.WriteLine("{0,-10:D6} {1,-10:D6}"123456);


输出是:

000123     000456


我们可以用这种格式化特性来对齐我们的输出。

Console.WriteLine("\n{0,-10}{1,-3}""Name","Salary");
Console.WriteLine(
"----------------");
Console.WriteLine(
"{0,-10}{1,6}""Bill"123456);
Console.WriteLine(
"{0,-10}{1,6}""Polly"7890);


输出是:

Name      Salary
----------------
Bill      123456
Polly       7890


3 格式化标识符

标准的数学格式字符串用于返回通常使用的字符串。它们通常象X0这样的格式。X是格式化标识符,0是精度标识符。格式标识符号共有9种,它们代表了大多数常用的数字格式。就像下表所示:

字母 含义
C或cCurrency 货币格式
D或dDecimal 十进制格式(十进制整数,不要和.Net的Decimal数据类型混淆了)
E或eExponent 指数格式
F或fFixed point 固定精度格式
G或gGeneral 常用格式
N或n用逗号分割千位的数字,比如1234将会被变成1,234
P或pPercentage 百分符号格式
R或rRound-trip  圆整(只用于浮点数)保证一个数字被转化成字符串以后可以再被转回成同样的数字
X或xHex 16进制格式


如果我们使用下面的表达方式,让我们看看会发生什么

public class FormatSpecApp
{
    
public static void Main(string[] args)
    {
        
int i = 123456;
        Console.WriteLine(
"{0:C}", i); // 123,456.00
        Console.WriteLine("{0:D}", i); // 123456
        Console.WriteLine("{0:E}", i); // 1.234560E+005
        Console.WriteLine("{0:F}", i); // 123456.00
        Console.WriteLine("{0:G}", i); // 123456
        Console.WriteLine("{0:N}", i); // 123,456.00
        Console.WriteLine("{0:P}", i); // 12,345,600.00 %
        Console.WriteLine("{0:X}", i); // 1E240
    }
}


精度控制标识控制了有效数字的个数或者十进制数小数的位数。

Console.WriteLine("{0:C5}", i); // 123,456.00
Console.WriteLine("{0:D5}", i); // 123456
Console.WriteLine("{0:E5}", i); // 1.23456E+005
Console.WriteLine("{0:F5}", i); // 123456.00000
Console.WriteLine("{0:G5}", i); // 1.23456E5
Console.WriteLine("{0:N5}", i); // 123,456.00000
Console.WriteLine("{0:P5}", i); // 12,345,600.00000 %
Console.WriteLine("{0:X5}", i); // 1E240


R(圆整)格式仅仅对浮点数有效。这个值首先会用通用格式来格式化。对于双精度数有15位精度,对于单精度数有7位精度。如果这个值可以被正确地解析回原始的数字,就会用通用格式符来格式化。如果不能解析回去的话,那么就会用17位精度来格式化双精度数,用9位精度来格式化单精度数。尽管我们可以在圆整标识符后面添加有效数字的位数,但是它会被忽略掉。

double d = 1.2345678901234567890;
Console.WriteLine(
"Floating-Point:\t{0:F16}", d);  // 1.2345678901234600
Console.WriteLine("Roundtrip:\t{0:R16}", d);       // 1.2345678901234567


如果标准格式化标识符还不能满足你。你可以使用图形化格式字符串来创建定制的字符串输出。图形化格式化使用占位符来表示最小位数,

最大位数,定位符号,负号的外观以及其它数字符号的外观。就像下表所示

 符号名称含义
00占位符用0填充不足的位数
#数字占位符用#代替实际的位数
.十进制小数点 
,千位分隔符用逗号进行千位分割,比如把1000分割成1,000
%百分符号显示一个百分标识
E+0
E-0
e+0
e-0
指数符号用指数符号格式化输出
\专一字符用于传统格式的格式化序列,比如"\n"(新行)
'ABC'
"ABC"
常量字符串 显示单引号或者双引号里面的字符串
;区域分隔符 如果数字会被格式化成整数,负数,或者0,用;来进行分隔
,.缩放符号数字除以1000


看下面的例子:

            double i = 123456.42;
            Console.WriteLine();
            Console.WriteLine(
"{0:000000.00}", i); //123456.42
            Console.WriteLine("{0:00.00000000e+0}", i); //12.34564200e+4
            Console.WriteLine("{0:0,.}", i);          //123
            Console.WriteLine("{0:#0.000}", i);             // 123456.420
            Console.WriteLine("{0:#0.000;(#0.000)}", i);        // 123456.420
            Console.WriteLine("{0:#0.000;(#0.000);<zero>}", i); // 123456.420
            Console.WriteLine("{0:#%}", i);     // 12345642%

            i = -123456.42;
            Console.WriteLine();
            Console.WriteLine(
"{0:000000.00}", i); //-123456.42
            Console.WriteLine("{0:00.00000000e+0}", i); //-12.34564200e+4
            Console.WriteLine("{0:0,.}", i);          //-123
            Console.WriteLine("{0:#0.000}", i);             // -123456.420
            Console.WriteLine("{0:#0.000;(#0.000)}", i);        // (123456.420)
            Console.WriteLine("{0:#0;(#0);<zero>}", i); // (123456)
            Console.WriteLine("{0:#%}", i);             // -12345642%

            i = 0;
            Console.WriteLine();
            Console.WriteLine(
"{0:0,.}", i);          //0
            Console.WriteLine("{0:#0}", i);             // 0
            Console.WriteLine("{0:#0;(#0)}", i);        // 0
            Console.WriteLine("{0:#0;(#0);<zero>}", i); // <zero>
            Console.WriteLine("{0:#%}", i);             // %


4 数字字符串的解析

所有的基础类型都有ToString方法,它是从object类型中继承过来的。所有的数值类型都有Parse方法,它用字符串为参数,并且返回相等的数值。比如

public class NumParsingApp
{
    
public static void Main(string[] args)
    {
        
int i = int.Parse("12345");
        Console.WriteLine(
"i = {0}", i);

        
int j = Int32.Parse("12345");
        Console.WriteLine(
"j = {0}", j);

        
double d = Double.Parse("1.2345E+6");
        Console.WriteLine(
"d = {0:F}", d);

        
string s = i.ToString();
        Console.WriteLine(
"s = {0}", s);
    }
}


输出如下

= 12345
= 12345
= 1234500.00
= 12345


在缺省状况下,某些非数字字符是可以存在的。比如开头和结尾的空白。逗号和小数点,加号和减号,因此,下面的Parse语句是一样的

string t = "  -1,234,567.890  ";
//double g = double.Parse(t);        // 和下面的代码干同样的事情
double g = double.Parse(t, 
    NumberStyles.AllowLeadingSign 
| 
    NumberStyles.AllowDecimalPoint 
|
    NumberStyles.AllowThousands |
    NumberStyles.AllowLeadingWhite | 
    NumberStyles.AllowTrailingWhite);
Console.WriteLine(
"g = {0:F}", g);


输出都是这样

= -1234567.89


注意到,如果你要使用NumberStyles,就要添加对System.Globalization的引用,然后就可以使用不同NumberStyles的组合或者其中的任意一种。如果你想兼容货币符号,就需要使用重载的Parse方法,它们采用了NumberFormatInfo对象作为一个参数,然后你可以设置NumberFormatInfo的CurrencySymbol属性来调用Parse方法,比如:

string u = "  -1,234,567.890  ";
NumberFormatInfo ni 
= new NumberFormatInfo();
ni.CurrencySymbol 
= "";
double h = Double.Parse(u, NumberStyles.Any, ni);
Console.WriteLine(
"h = {0:F}", h);


上面的代码有如下输出

= -1234567.89


除了NumberFormatInfo,还可以使用CultureInfo类。CultureInfo代表了某种特定的文化,包括文化的名字,书写的方式,日历的格式。对于某种特定文化的操作是非常普遍的情况,比如格式化日期和排序。文化的命名方式遵从RFC1766标准,使用<语言代码2>-<国家/地区码2>的方式,其中的<语言代码2>是两个小写的字母,它们来自ISO639-1;<国家/地区码2>是两个大写字母,它们来自ISO3166。比如,美国英语是“en-US"。英国英语是"en-GB"。特立尼达和多巴哥英语是"en-TT"。例如,我们可以创建一个美国英语的CultureInfo对象并且基于这种文化将数字转换成字符串。

int k = 12345;
CultureInfo us 
= new CultureInfo("en-US");
string v = k.ToString("c", us);
Console.WriteLine(v);


输出是:

$12,345.00


要注意到,我们使用了重载的ToString方法,它把第一个格式化字符串当成第一个参数,将一个CultureInfo对象(执行了IFormatProvider对象)作为第二个参数。这儿有第二个例子,对于丹麦人来说:

CultureInfo dk = new CultureInfo("da-DK");
string w = k.ToString("c", dk);
Console.WriteLine(w);


输出是:

kr 12.345,00


5 字符串和日期

一个日期对象有个叫Ticks的属性。它存储了自从公元1年的1月1号上午12点开始的,以100纳秒为间隔的时间。比如,Ticks值等于31241376000000000L表示公元100年,星期五,1月1号,上午12点这一时间。Ticks总是以100纳秒为间隔递增。

DateTime的值以存储在DateTimeFormatInfo实例里面的标准或者自定义的方式来表示。为了修改一个日期显示的方式,DateTimeFormatInfo实例必须要是可写的,以便我们写入自定义的格式并且存入属性中

using System.Globalization;

public class DatesApp
{
    
public static void Main(string[] args)
    {
        DateTime dt 
= DateTime.Now;
        Console.WriteLine(dt);
        Console.WriteLine(
"date = {0}, time = {1}\n",
            dt.Date, dt.TimeOfDay);
    }
}


代码会产生下面的输出

23/06/2001 17:55:10
date = 23/06/2001 00:00:00, time = 17:55:10.3839296


下表列出了标准的格式字符串以及相关的DateTimeFormatInfo属性

D  
DMM/dd/yyyyShortDatePattern(短日期模式)
Ddddd,MMMM dd,yyyy   LongDatePattern(长日期模式)
Fdddd,MMMM dd,yyyy HH:mmFull date and time (long date and short time)(全日期和时间模式)
Fdddd,MMMM dd,yyyy HH:mm:ssFullDateTimePattern (long date and long time)(长日期和长时间)
GMM/dd/yyyy HH:mmGeneral (short date and short time)(通用模式,短日期和短时间)
GMM/dd/yyyy HH:mm:ssGeneral (short date and long time)(通用模式,短日期和长时间)
M,MMMMM dd MonthDayPattern(月天模式)
r,Rddd,dd MMM yyyy,HH':'mm':'ss 'GMT'RFC1123Pattern (RFC1123模式)
Syyyy-MM-dd HH:mm:ss SortableDateTimePattern (conforms to ISO 8601) using local time(使用本地时间的可排序模式)
THH:mm ShortTimePattern (短时间模式)
THH:mm:ssLongTimePattern(长时间模式)
Uyyyy-MM-dd HH:mm:ssUniversalSortable-DateTimePattern (conforms to ISO 8601) using universal time(通用可排序模式)
Udddd,MMMM dd,yyyy,HH:mm:ssUniversalSortable-DateTimePattern(通用可排序模式)
y,YMMMM,yyyyYearMonthPattern(年月模式)


DateTimeFormatInfo.InvariantInfo属性得到了默认的只读的DateTimeFormatInfo实例,它与文化无关。你可以创建自定义的模式。要注意到的是InvariantInfo不一定和本地的格式一样。Invariant等于美国格式。另外,如果你向DateTime.Format方法传递的第二个参数是null,DateTimeFormatInfo将会是默认的CurrentInfo。比如

Console.WriteLine(dt.ToString("d", dtfi));
Console.WriteLine(dt.ToString(
"d"null));
Console.WriteLine();


输出是

06/23/2001
23/06/2001


对比选择InvariantInfo和CurrentInfo的。

DateTimeFormatInfo dtfi;
Console.Write(
"[I]nvariant or [C]urrent Info?: ");
if (Console.Read() == 'I')
    dtfi 
= DateTimeFormatInfo.InvariantInfo;
else
    dtfi = DateTimeFormatInfo.CurrentInfo;
DateTimeFormatInfo dtfi 
= DateTimeFormatInfo.InvariantInfo;
Console.WriteLine(dt.ToString(
"D", dtfi));
Console.WriteLine(dt.ToString(
"f", dtfi));
Console.WriteLine(dt.ToString(
"F", dtfi));
Console.WriteLine(dt.ToString(
"g", dtfi));
Console.WriteLine(dt.ToString(
"G", dtfi));
Console.WriteLine(dt.ToString(
"m", dtfi));
Console.WriteLine(dt.ToString(
"r", dtfi));
Console.WriteLine(dt.ToString(
"s", dtfi));
Console.WriteLine(dt.ToString(
"t", dtfi));
Console.WriteLine(dt.ToString(
"T", dtfi));
Console.WriteLine(dt.ToString(
"u", dtfi));
Console.WriteLine(dt.ToString(
"U", dtfi));
Console.WriteLine(dt.ToString(
"d", dtfi));
Console.WriteLine(dt.ToString(
"y", dtfi));
Console.WriteLine(dt.ToString(
"dd-MMM-yy", dtfi));


输出是

[I]nvariant or [C]urrent Info?: I
01/03/2002
03/01/2002

Thursday, 03 January 2002
Thursday, 03 January 2002 12:55
Thursday, 03 January 2002 12:55:03
01/03/2002 12:55
01/03/2002 12:55:03
January 03
Thu, 03 Jan 2002 12:55:03 GMT
2002-01-03T12:55:03
12:55
12:55:03
2002-01-03 12:55:03Z
Thursday, 03 January 2002 12:55:03
01/03/2002
2002 January
03-Jan-02


[I]nvariant or [C]urrent Info?: C
03/01/2002
03/01/2002

03 January 2002
03 January 2002 12:55
03 January 2002 12:55:47
03/01/2002 12:55
03/01/2002 12:55:47
03 January
Thu, 03 Jan 2002 12:55:47 GMT
2002-01-03T12:55:47
12:55
12:55:47
2002-01-03 12:55:47Z
03 January 2002 12:55:47
03/01/2002
January 2002
03-Jan-02


/******************************************************************************************
 *【Author】:flyingbread
 *【Date】:2007年1月18日
 *【Notice】:
 *1、本文为原创技术文章,首发博客园个人站点(http://flyingbread.cnblogs.com/),转载和引用请注明作者及出处。
 *2、本文必须全文转载和引用,任何组织和个人未授权不能修改任何内容,并且未授权不可用于商业。
 *3、本声明为文章一部分,转载和引用必须包括在原文中。
 ******************************************************************************************/


http://chatgpt.dhexx.cn/article/MppZttD2.shtml

相关文章

NSString函数stringWithFormat与stringWithString的比较

我们经常会初始化一些string使用NSString的stringWithString函数 但使用时发现了一个stringWithString的问题&#xff0c;如图 当参数是nil时&#xff0c;stringWithString会crash&#xff0c;所以使用时必须验证参数不是nil 相比较stringWithFormat就不会crash但返回的str也…

stringWithFormat:用法及注意事项

在ObjectiveC中NSString中有一个 stringWithFormat&#xff1a;方法 常见的输出方式&#xff1a; NSString *height; height [NSString stringWithFormat:"Your height is %d feet, %d inches.",5,11]; NSLog("%",height); 输出结果&#xff1a; 2013-04-…

虚拟机VirtualBox下载与安装、安装Ubuntu超详细图文步骤,对一些配置问题也有所写。

对于机器学习和深度学习来说&#xff0c;Linux系统是必不可少的。而我们在只是学习当中一般不会去重装一个Linux系统&#xff0c;而是去使用虚拟机来使用Linux系统。在VMware与VirtualBox这两款虚拟机的体验上&#xff0c;个人更偏向于后者&#xff0c;因为它所占内存更小&…

安装Windowsxp虚拟机

1.打开VMware&#xff0c;选择创建新的虚拟机&#xff0c;微软windows系统选择典型&#xff0c;而linux系统选择自定义&#xff1a; 2.选择稍后安装操作系统&#xff1a; 3.下一步选择相应合适的版本&#xff0c;选择存放位置&#xff1a; 4.选择合适大小的硬盘给虚拟机&…

在虚拟机VMware上安装XP系统

由于最近在学习uc/os-ii操作系统需要用到Borland C 3.1版本的软件&#xff0c;但是由于本人笔记本电脑的系统为Windows7 64位操作系统&#xff0c;与BC3.1不兼容&#xff0c;又不想直接换成XP系统&#xff0c;所以想在虚拟机VMware上安装XP&#xff0c;刚开始在网上搜了很多教程…

VirtualBox安装

1、VirtualBox安装 运行安装程序&#xff0c;一直下一步即可。如果不想安装到C盘&#xff0c;可以自己选盘符。 注意&#xff1a;软件开发安装所有程序时&#xff0c;不要安装到有中文或特殊符号的路径下。 2、安装操作系统 点击新建&#xff0c;弹出如下对话框 名称&…

VirtualBox虚拟机安装

一、宿主机(物理机)要求 宿主机建议内存大于4G&#xff0c;cpu至少4个 二、下载virtualBox https://www.virtualbox.org/wiki/Downloads 下载的安装包&#xff0c;默认安装即可(也可指定目录安装) 三、下载系统镜像 可以参考另外一篇各种ISO镜像 四、VirtualBox安装虚拟…

使用VirtualBox安装Ubuntu系统

一、下载VirtualBox软件安装包和Ubuntu系统镜像 1.1 下载VirtualBox安装包 点我进入VirtualBox官网下载安装包。 1.2 下载ubuntu20.04系统镜像 我使用的是国内清华大学的镜像&#xff0c;点我进行镜像选择和下载&#xff0c;这里我选择的是64位的系统镜像。 二、安装Vi…

如何在vmware workstation 上安装xp系统

准备&#xff1a;系统ISO镜像&#xff0c;可去MSDN下载。**Vmware workstation软件** 安装过程&#xff1a; 1&#xff0c;打开vmware软件&#xff0c;点击“创建新的虚拟机” 2&#xff0c;在窗口中选择典型&#xff0c;然后下一步。 3&#xff0c;选择“稍后安装操作系统”…

超级详细的 VirtualBox 虚拟机安装 及入门教程

一、前言 虚拟机&#xff08;Virtual Machine&#xff09;指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。 虚拟机是在一些开发测试工作中常常需要用到的功能&#xff0c;常见的虚拟机…

virtualbox安装详解

环境 系统&#xff1a;win7 内存&#xff1a;8GB 软件版本 VBox版本&#xff1a;安装的最新版本 [VirtualBox-5.2.12-122591-Win.exe] 运行VirtualBox的安装程序 执行步骤如下&#xff1a; 1、进入安装向导&#xff0c;点击”下一步“ 2、进入自定安装&#xff0c;软…

使用 virtualBox 安装 ubuntu

1.在官网上下载virtualBox windows用户点击如下图开始下载&#xff1a; 2.下载好VirtualBox-6.1.34a-150636-Win.exe文件后运行&#xff0c;一直点击下一步完成安装 3.在ubuntu镜像站下载Ubuntu&#xff0c;如下图&#xff1a; 4.打开VirtualBox&#xff0c;开始新建&#xf…

手把手教,使用Oracle VM VirtualBox虚拟机安装Windows XP系统,爷青回

文章目录 一、前言二、Oracle VM VirtualBox下载安装三、XP系统镜像下载四、创建XP虚拟机五、启动虚拟机&#xff0c;安装系统六、主机与虚拟机双向互传文件 一、前言 我写了一篇关于VMware虚拟机安装Windows XP系统的文章&#xff1a;https://linxinfa.blog.csdn.net/article…

在虚拟机中安装Windows XP

首先&#xff0c;下载镜像文件&#xff1a; 链接在这里&#xff1a;ed2k://|file|zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_x14-80404.iso|630239232|CD0900AFA058ACB6345761969CBCBFF4|/ 可以使用迅雷下载&#xff0c;没会员我感觉也挺快&#xff08;我没…

教程--用Oracle VM VirtualBox虚拟机安装winxp操作系统

zz http://www.dasairen.com/OracleVMVirtualBox/10181611099.html首先&#xff0c;安装Virtualbox&#xff0c;这一步骤一如你以往安装各种替他软件&#xff0c;此处就不再赘言。 打开安装好的Virtualbox&#xff0c;点击新建按钮&#xff0c;进入进入创建新建虚拟电脑的向导…

[XP虚拟机安装]VMware安装XP虚拟机

[XP虚拟机安装]VMware安装XP虚拟机 下载VMware下载XP Professional&#xff0c;我是在这个网站下的http://www.runker.net/windows-xp-sp3.html新建虚拟机&#xff0c;选择典型 选择刚刚下载的XP镜像文件&#xff08;这里用简易安装更方便&#xff0c;如果不用简易安装还需要进…

VirtualBox安装教程及使用(Windows)

文章目录 0x00 文章内容0x01 VirtualBox的下载与安装1. 下载2. 安装3. 可能会出现错误 0x02 VirtualBox安装Centos1. 安装Centos2. 可能出现的问题3. 设置网络4. 导入VMware的虚拟机5. 克隆虚拟机 0xFF 总结 0x00 文章内容 VirtualBox的下载与安装VirtualBox安装Centos 0x01 …

windows XP虚拟机安装

一.安装环境&#xff1a;win10 VMware15 win xp.iso 二.安装过程&#xff1a; 1.用自定义&#xff08;高级&#xff09;安装 &#xff08;原因是虚拟磁盘类型必须选IDE&#xff0c;而典型是默认磁盘类型的&#xff0c;如果你用典型发现到后面会报错&#xff09; 2.按照自己的…

VirtualBox的下载与安装

文章来源&#xff1a;http://sh.qihoo.com/pc/91c30d12ff6bd60e9?cota4&tj_urlxz&sign360_e39369d1&refer_sceneso_1 1.下载VirtualBox。 VirtualBox官方网站地址--https://www.virtualbox.org/, 图1 点击进入后页面左侧栏目中的Downloads,进入下载页面。因为楼…

使用VirtualBox安装Ubuntu虚拟机 - 完整教程

【前言】 本教程将演示通过 VirtualBox 安装 Ubuntu &#xff0c;请提前下载好以下文件哦&#xff1a; ① VirtualBox 软件 ② Ubuntu 的 镜像文件&#xff08;.iso&#xff09; 【下载地址】 VirtualBox 版本&#xff1a;VirtualBox 7.0.2 官网链接 https://www.virtualbox.…