分类号的基本格式有哪些(网!

分类号的基本格式有哪些(网

趋势迷

分类号的基本格式有哪些(

2024-07-10 12:16:02 来源:网络

分类号的基本格式有哪些(

Oracle基本数据类型存储格式浅析(二)数字类型
这篇文章主要描述NUMBER类型的数据和如何在数据库中存储的🌓♟_🐫🦅。 1 number类型的组成 Oracle的number类型最多由三个部分构成🙀||🐽,这三个部分分别是 “最高位表示位”🥋-|🌻🐙、“数据部分”🍄|⛸、“符号位”🐇||🌧。 其中负数存在符号位🪰-|😵,正数没有符号位🐭--🍂🦊。 另外🎍——🏐,数0比较特殊🧵_|🍀🦠,它只包
这篇文章主要描述NUMBER类型的数据和如何在数据库中存储的🎴-_🦅。
1 number类型的组成
Oracle的number类型最多由三个部分构成*🦆_✨,这三个部分分别是“最高位表示位”🐍_🐈🌙、“数据部分”🦂🐬-——🤩🪆、“符号位”😷🌞-——🙄。
其中负数存在符号位♟|🥀,正数没有符号位🐵-|😝🙊。
另外🦫||🥎*,数值0比较特殊🐪🦓-🐱,它只包含一个数值最高位表示位80🌿🐖-🌎🐽,没有数据部分🐅🎋——_🎎,也没有符号位🤯|🐱🦝。
1.1 最高位表示位
正数的最高位表示位大于80🌔--💀,负数的最高位表示位小于80🏒😀——🌒*。
一个正数的最高位是个位的话🐙|🎀,则最高位表示位为0X C1(即十进制的193)🐖-——😠🐫,百位🦁--🐲、万位依次为C2😊--😦🎇、C3🔮——_🐑,百分位🎮🐏_🤢、万分为依次为C0🪆|-🦗、BF🦋🦉_——🪁🐦。
一个负数的最高位为个位的话☘🧨-🐫,最高位表示位为0X 3E(即十进制的62)🐗🍀——🐹🦣,百位🤩🕸|🐚、万位依次为3D😩——_🎨🧸、3C🎳🔮_🦫,百分位🎄🎉|🐼、万分位依次为3F✨🎐-🐑、40🦖——-🤠。
1.2 数据部分
数据部分每一字节都表示2位数字🎨😩|😯。(由)这个两位数字(组成的一个数值)的范围可能是从0到99😲——|🌨,如果是数据本身是正数🕸_🌺,则分别用六进制的1到64表示♦|——🐲,如果数据本身是负数😇|_🐲🎁,则使用六进制65到2表示🧐🦅|😪。
注意🐪🌨|-🤭🦆:
在数据部分中😒——🐗,同样是(数据部分中的)0🕸-🪲*,在正数时用0x01表示🐞——🌻😣,而在负数时用0x65表示🤓||🐚。
在数据部分中😉||🦅,同样是(数据部分中的)99🕷🐘-_🐉,在正数时用0x64表示🐘🌲-🕊,而在负数时用0x2表示🏐⭐️——🌙。
1.3 符号位
当数字为负数🤡😡——-🐕‍🦺🎭,才有符号位🥎🐞——🪳。符号位用0x66表示🎱|_🐾😖。
注意☄️|😗:用0x66表示🥊||🎣,因为同样的一个数字🐇🐁|——🌈,在正数与负数表示时🦍🐅||🎈🦒,它们之和为0x66🥋——🦄。例如🦇——🙀:1的数据部分表示为0x02🌔|😗,而-1的数据部分表示为0x64😶|🐩🦁。这个两个数之和为0x66🎄_👽🐭。
2 实验过程
上面的这些是我通过DUMP结果总结出来的🐰🎨-——🐥,对于上面提到的这些关系常数😄_🕷🐫,Oracle之所以这样选择是有道理的🦁|🪱🕊,我们后面根据例子也可以推导出来🎄🪅-🐬*,而且会进一步说明为什么会采用这种方式表示🐑🐖|🎎。这里列出的意思是使大家先对NUMBER类型数据有一个大概的了解☁️——🍃🐷。
下面我们通过一个例子详细说明🎊✨||😷:
SQL> create table test_number (number_col number);
Table created
SQL> insert into test_number values (0);
1 row inserted
SQL> insert into test_number values (1);
1 row inserted
SQL> insert into test_number values (2);
1 row inserted
SQL> insert into test_number values (25);
1 row inserted
SQL> insert into test_number values (123);
1 row inserted
SQL> insert into test_number values (4100);
1 row inserted
SQL> insert into test_number values (132004078);
1 row inserted
SQL> insert into test_number values (2.01);
1 row inserted
SQL> insert into test_number values (0.3);
1 row inserted
SQL> insert into test_number values (0.00000125);
1 row inserted
SQL> insert into test_number values (115.200003);
1 row inserted
SQL> insert into test_number values (-1);
1 row inserted
SQL> insert into test_number values (-5);
1 row inserted
SQL> insert into test_number values (-20032);
1 row inserted
SQL> insert into test_number values (-234.432);
1 row inserted
SQL> commit;
Commit complete
SQL> col d_number format a50
SQL> select number_col, dump(number_col, 16) d_number from test_number;
NUMBER_COL D_NUMBER
---------- --------------------------------------------------
0 Typ=2 Len=1: 80
1 Typ=2 Len=2: c1,2
2 Typ=2 Len=2: c1,3
25 Typ=2 Len=2: c1,1a
123 Typ=2 Len=3: c2,2,18
4100 Typ=2 Len=2: c2,2a
132004078 Typ=2 Len=6: c5,2,21,1,29,4f
2.01 Typ=2 Len=3: c1,3,2
0.3 Typ=2 Len=2: c0,1f
1.25E-6 Typ=2 Len=3: be,2,1a
115.200003 Typ=2 Len=6: c2,2,10,15,1,4
-1 Typ=2 Len=3: 3e,64,66
-5 Typ=2 Len=3: 3e,60,66
-20032 Typ=2 Len=5: 3c,63,65,45,66
-234.432 Typ=2 Len=6: 3d,63,43,3a,51,66
15 rows selected
3 结论解释
下面根据例子得到的结果🌤|🛷🐔,对每行进行说明🌺————🏅😩。首先说明两点基本的🐅-|😁。DUMP函数返回的TYPE=2表示DUMP的数据类型是NUMBER😉|🕹🐂,LENGTH=N表示数值在数据库中存储的长度是N🦊🌺|🦓。
3.1 Dump(0)
DUMP(0) 的结果是0x80🐌-*🪆,在前面已经提到🏉|_😳,0只有高位表示位🌞-🏈🪅,没有数据位🧵🙃_😌🥏。由于0的特殊💮-_😑🎗,既不属于正数🌺🐾-😟,也不属于负数🦢*--🐚,因此使用高位表示位用80表示就足够了🪲🤡|——🦌,不会和其它数据冲突🌸🥌-🌟🌙,Oracle出于节省空间的考虑将后面数据部分省掉了🐙_*。
但是为什么Oracle选择0x80表示0呢?我们知道正数和负数互为相反数🐋-|☄️,每个正数都有一个对应的负数🤩|*🌏。因此如果我们要使用编码表示数值🦌-🎳🐫,则表示正数和负数的编码应该各占一半🀄🐐|⚾,这样才能保证使Oracle表示数据范围是合理的🪲😺-_🐅🐲。而0x80的二进制编码是1000 0000🦣🧶——🪳,正好是一个字节编码最大值的一半*——🐨😕,因此🦮——🤭🤑,Oracle选择0x80来表示0🏓😱|🪆,是十分有道理的🦜🌲_🐷。
注释🌒🌒|🐍:
0x80的二进制编码是1000 0000🏐——🐨,正好是一个字节编码最大值的一半🌴🙄|☺️,因为
1·0111 1111共2的8次方-1个(Oracle底层是用C语言实现的😇🌵-——🦣,我们知道二进制0在C语言中用作字符串终结符♥🤑-🌍,Oracle为了避免这个问题🦘*_😵*,故将0这个值去掉)🥅_🐇🐤,而1000 0001·1111 1111也共2的8次方-1个🐅——*。
3.2 Dump(1)
DUMP(1)的结果是0xc102😷🤑_🐺,0xc1表示了最高位个位🐝|——🐨🐄,0x2表示数值是1🦂😖-🦐🌔。首先☹️🐕——|🦍,Oracle为什么用C1表示个位呢?其实👹🐡-😿,道理和刚才的差不多⛳_|🦐🦉。采用科学计数法🦗🎭|🎏,任何一个实数S都可以描述为A.B×10n😑——🦊,A 表示整数部分🏸-_🎋🦋,B表示小数部分🤥_-🎟,而N表示10的指数部分🎎——_☺️🐽。当S大于1时🌈||🦦⛳,N大于等于0🦜🃏——🤐,S小于1时🦛__💀😷,N小于0🌎-😈👹。也就是说🐏🎋——-😺🦋,采用指数的方式表示🐈——🌕,N大于0和 N小于0的情况各占一半左右时🤠——🎱🐽,Oracle所表示的范围最广(?)🙉🪁_🦠☘️。因此😰|_🎯,Oracle选择了C1表示个位是最高位的情况🐀|🥉。
SQL> SELECT TO_CHAR(ROUND(TO_NUMBER('81', 'XXX') + (TO_NUMBER('FF', 'XXX') - TO_NUMBER('81', 'XXX') + 1)/2), 'XX') VALUE FROM DUAL;
VALUE
-----
C1
为什么ORACLE使用0x2表示1🤕_😧,而不直接使用0x1表示1呢?Oracle每个字节表示2位数💥————🐸,因此对于这个2位数⚡️😌-_⭐️,出现的可能是0~99共100种可能🐃🤡|_🌞🌷,问题出在0这里🎗🎣_🐖♟。
Oracle底层是用C语言实现的🤕🕹-🤫,我们知道二进制0在C语言中用作字符串终结符🐀🐌|🌘🦖,Oracle为了避免这个问题🏈_🦕,因此使用了0x1表示0🎯😑——🌼🦇,并依次类推🤮🎳——🌳🐟,使用0x64表示99🪁🐁__🐦。
3.3 Dump(2)
DUMP(2)的结果是0xc103🦛_——🦈。
3.4 Dump(25)
DUMP(25)的结果是0xc11a🏆-🐍🐆。前面提到🐷🦐-💥🐬,数据部分是以2位为最小单位保存的🤒_😝☀️。因此对于25来说🐵🎮|😌🐣,最高位表示位仍然是个位🐖——😩,个位上的值是25😜——-☹️🦄,根据上面推出的规则*_🦭🦟,25在存储为0xc11a🧶🐫-🐱🎾。
SQL> SELECT TO_CHAR(25 + 1, 'xx') VALUE FROM DUAL;
VALUE
-----
1a
3.5 Dump(123)
DUMP(123)的结果是0xc20218🧧|-🦛🐜。由于123最高为是百位🐈🏉————🐚♦,所以最高位表示位为0xc2😗🎳——|😜🐍,百位上是1🧨🦅——|🦖🐐,用0x02表示*————🐈‍⬛,个位上是23🌳——|🦎🐞,用0x18表示*🐄|_🌤。
3.6 Dump(4100)
DUMP(4100)的结果是0xc22a🐵🦥——|🐺。
注意一点😞🐏——|🦘,如果数字最后数位上如果是0⛸🦎-⛸,Oracle出于节省空间的考虑不会存储🐍🦓——_🍄。比如🎯|——🐯🐃:4100只保存百位上的41🌳|——🦇,12000000只保存百位位上的12🐑——-🦒,512000只保存万位上的51和百位上的20🌞——🌓。
3.7 Dump(132004078)
DUMP(132004078)的结果是0xc5022101294f🐤——_🐫🥀。最高位是亿位🐾||🦛😳,因此用0xC5表示🐬——🌿,亿位上是1用0x02表示🐱——|🐕,百万位上是32用0x21表示🦙——🌵🐒,万位上是0用0x01表示🐓😯|——🎊🐺,百位上是40用0x29表示⭐️|🎈,个位上78用0x4F表示🌷🦘|⭐️。
注意🌘|🙃🥅:中间数位上的0不能省略😫|_😄。
3.8 Dump(2.01)
DUMP(2.01)的结果是0xc10302🐼_|😗🀄。最高位是个位用0xC1表示🤬-😲,个位上是2用0x03表示🦇🐺_🌎🌲,百分位上是1用0x02表示💐_——💐🐳。
注意😗-|😪🌈:个位下面一位是百分位不是十分位🎀——|*。
3.9 Dump(0.3)
DUMP(0.3)的结果是0xc01f🦠🦇|🥇🌟。最高位是百分位🐰*_🦝🙈,使用0xC0表示🌾🦟|-🥀,百分位上是30用0x1F表示🦈|🐏🦭。
3.10 DUMP(0.00000125)
DUMP(0.00000125)的结果是0xbe021a🏈🙁|——🎍🌳。最高位是百万分位🪡*||🥏,用0xBE表示😖🦬——🌕,最高位上的1用0x02表示🐸|——🦔🐝,25用0x1a表示😜-🐨。
3.11 DUMP(115.200003)
DUMP(115.200003)的结果是0xc20210150104🐩__🐡🎉。
3.12 DUMP(-1)
DUMP(-1)的结果是0x3e6466☘🐖--🏆。最高位个位💐🎉-|🦐,用0x3E表示🦇🧧——🏓🦄,64表示个位上是1🦅——🐳⛳,66是符号位🃏😋————🐇🎐,表示这个数是负数🤗——-🎐🥊。
负数和正数互为相反数😤🦛-🐦😃,负数的最高位表示位和它对应的相反数的最高位相加的值是FF🕊✨——-🎾。 1的最高位表示位是C1🦗🎈_|😽,-1的最高位表示位是3E🦐🐥_🌿。负数中1用64表示😋_🌔☘。负数中的数值和它相反数的数据相加是0x66🐿🦘_|🏑,也就是符号位😓🤯__♥🐣。正数1用0x02 表示🎈_🎉,负数1用0x64表示*😐||🐊🐋,二者相加是0x66🌾🦡——-🐄。负数多个一个标识位☄️*-——😦🎇,用0x66表示🐐🐪-——🦝🏸。由于正数的表示范围是0x01到0x64🐣——🐈‍⬛,负数的表示范围是 0x65到0x02🐔-——🌔😺。因此🐘_🥈,不会在表示数字时出现的0x66表示🦁💥-🤑。
3.13 DUMP(-5)
DUMP(-5)的结果是0x3e6066😯————🐣。0x3e表示最高位是个位🤫🦌|🥈,0x60表示个位上是5*🦣——☘️🤮,0x66是符号标识位🐳|-🌏。0x3E加0xC1是0xFF🐀🤮-🐔。0x60加0x06的结果是0x66😣——🦍😉。
3.14 DUMP(-20032)
DUMP(-20032) 的结果是0x3c63654566🎖🤖|🐀。最高位是万位🦓🪳——-🤩,正数的万位是0xC3🐝——😯🦃,因此负数的万位是0x3C🦈——|🐤。万位上是2😬|😭🦒,正数用0x03表示🪴🤕--🐟,负数为0x63🍂🌗||🎏,百位上是0⭐️——🦏,正数用0x01表示🤒|🎎,负数使用0x65表示*——|🌟🎳,个位上是32🌑_——🐉,正数用0x21表示😮🦋————🤫,负数使用0x45表示🐨|——🦝。0x66是负数表示位🐼-_🦂🐲。
3.15 DUMP(-234.432)
DUMP(-234.432)的结果是0x3d63433a5166🙀_🧿。
转贴*🐟_|🎗🥇:http://www.itpub.net/forum.php?mod=viewthread&tid=308317

分类号的基本格式有哪些(

Oracle基本数据类型存储格式浅析(一)字符类型
主要说明字符类型的存储式😉-|*。主要包括char🦦🌈|_🤿🌻、varchar2和long等几种类型🃏——|🐑🦌。 1 实验(数字🪁——🐃🐙,英文字母) 1.1 建表 SQL create table test_char(char_col char(10), varchar_col varchar2(10), long_col long) tablespace assm; Table created SQL insert into test
1 实验(数字😾🎗-*🦮,英文字母)
1.1 建表
SQL> create table test_char(char_col char(10), varchar_col varchar2(10), long_col long) tablespace assm;
Table created
SQL> insert into test_char values ('abc', '123', ',fd');
1 row inserted
SQL> commit;
Commit complete
SQL> select a.*,
2 rowid,
3 dbms_rowid.rowid_object(rowid) obj#,
4 dbms_rowid.rowid_relative_fno(rowid) file#,
5 dbms_rowid.rowid_block_number(rowid) block#,
6 dbms_rowid.rowid_row_number(rowid) row#
7 from test_char a;
CHAR_COL VARCHAR_COL LONG_COL ROWID OBJ# FILE# BLOCK# ROW#
---------- ----------- ------------ ------------------ ---------- ---------- ---------- ----------
abc 123 ,fd AAANCkAAHAAAACYAAA 53412 7 152 0
1.2 dump block
FILE#为7😐-——🐰🦡,BLOCK#为152🤓_🌹。
SQL> alter system dump datafile 7 block 152;
System altered
SQL> select p.spid
2 from v$session s, v$process p, v$mystat m
3 where s.paddr = p.addr
4 and s.sid = m.sid
5 and rownum = 1;
SPID
-----------
18108
1.3 查看trace文件
根据SPID找到trace文件🤭——😈🦃。
……
block_row_dump:
tab 0, row 0, @0x1f82
tl: 22 fb: --H-FL-- lb: 0x1 cc: 3
col 0: [10] 61 62 63 20 20 20 20 20 20 20
col 1: [ 3] 31 32 33
col 2: [ 3] 2c 66 64
end_of_block_dump
1.4 结论分析
观察dump出来的结果🎄-|🐣,可以发现以下几点🦇🕷_——🌟:
1.对于每个字段⚡️-——*,除了保存字段的值以外🙃🐵|🌺*,还会保存当前字段中数据的长度🎍🪳——_🌱。而且🦕_-🦝,oracle显然没有把字段的长度定义或类型定义保存在block中🐕_|🦔,这些信息保存在oracle的数据字典里面🍃-|🦑🎋。
2.根据dump的结果🦄🦋|——🎴🐀,可以清楚的看到😭|_🦒,字符类型在数据库中是以Ascii格式存储的🦮|🐡🀄。
SQL> select chr(to_number('61', 'xx')) from dual;
CHR(TO_NUMBER('61','XX'))
-------------------------
a
SQL> select dump(char_col, 16) d_char from test_char;
D_CHAR
--------------------------------------------------------------------------------
Typ=96 Len=10: 61,62,63,20,20,20,20,20,20,20
SQL> select dump(varchar_col, 16) d_varchar2 from test_char;
D_VARCHAR2
--------------------------------------------------------------------------------
Typ=1 Len=3: 31,32,33
SQL> select dump(long_col, 16) d_varchar2 from test_char;
select dump(long_col, 16) d_varchar2 from test_char
ORA-00997: illegal use of LONG datatype
由于DUMP 不支持LONG类型🃏😼||🎣,因此我们使用了alter system dump block的方式🐝————🍃,通过比较两种方式得到的结果🎎-🕷🦓,发现DUMP()函数不但方便🐱-_👻🐟,结果清晰😲🐏|——🐄,而且指出了进行DUMP的数据类型🎭_——🦭🌱,在以后的例子中🕊-🎋,除非必要 的情况😋_👹🌹,否则都会采用DUMP()函数的方式进行说明🎈-😝🐵。
2 实验(中文)
2.1 中文
SQL> select a.name, a.value$ from sys.props$ a where a.name like '%CHARACTERSET%';
NAME VALUE$
------------------------------ ----------------
NLS_CHARACTERSET ZHS16GBK
NLS_NCHAR_CHARACTERSET AL16UTF16
SQL> insert into test_char values ('定长', '变长', null);
1 row inserted
SQL> commit;
Commit complete
SQL> select dump(char_col, 16) d_char from test_char;
D_CHAR
--------------------------------------------------------------------------------
Typ=96 Len=10: 61,62,63,20,20,20,20,20,20,20
Typ=96 Len=10: b6,a8,b3,a4,20,20,20,20,20,20
SQL> select dump(varchar_col, 16) d_varchar2 from test_char;
D_VARCHAR2
--------------------------------------------------------------------------------
Typ=1 Len=3: 31,32,33
Typ=1 Len=4: b1,e4,b3,a4
根据dump结果🪶__😺😜,可以清楚的看出⭐️🥀-|🤫🍂,普通英文字符和标点用一个字节表示😮——🤫🧿,而中文字符或中文标点需要两个字节来表示🍀_🦂。
2.2 nchar与nvarchar2
SQL> create table test_nchar(nchar_col nchar(10), nvarchar_col nvarchar2(10));
Table created
SQL> insert into test_nchar values('nchar定长', 'nvarchar变长');
1 row inserted
SQL> commit;
Commit complete
SQL> select dump(nchar_col, 16) from test_nchar;
DUMP(NCHAR_COL,16)
--------------------------------------------------------------------------------
Typ=96 Len=20: 0,6e,0,63,0,68,0,61,0,72,5b,9a,95,7f,0,20,0,20,0,20
SQL> select dump(nvarchar_col, 16) from test_nchar;
DUMP(NVARCHAR_COL,16)
--------------------------------------------------------------------------------
Typ=1 Len=20: 0,6e,0,76,0,61,0,72,0,63,0,68,0,61,0,72,53,d8,95,7f
采用nchar*😠————🌲,nvarchar2虽然仍然是采用Ascii码存储🤬🎍_🐱,但是nchar使用的AL16UTF16字符集🐬😻--🕸,编码长度变为2个字节🦡-_🐤。这样中文使用两个字节🌍——_*🐌,对于可以用一个字节就表示的英文字符🐄|🌳,采用了高位补0的方式凑足2位🐭🐬__🐤,这样🐦_——*🌼,对于采用AL16UTF16字符集的nchar类型😆*-😏,无论中文还是英文都用2位字符表示🧸|——🦂。
转贴🌕——🐤*:http://www.itpub.net/forum.php?mod=viewthread&tid=308317

索赔报告的基本格式内容都有哪些索赔是承包人在工程施工中*-😇🌴,因为不是自己过错的原因🤯-——🐬,承担了合同约定之外的义务或者损失😸_🦦,因而向发包人要求赔偿的行为🤯🪡-——🐂。索赔报告是承包人向发包人提出索赔的书面文件🎭🌖——|🐕‍🦺🦑,是承包人对索赔事件的明确表示🦮🐘——😏,是双方协商索赔和调解😁——|😰、仲裁🐺|🤭、裁判的重要文件🤒——🤑,索赔报告应该符合情理🤧|🐬,逻辑性强🐒🎉|-♠,结构严谨🏅♠-——🏓,有证据说明索赔事件🏏😴——🎨,同时还要根据法律和合同引导出索赔报告要求的结果🐵_——🦬,能使工程师*_☺️😼、业主正确认识事件🥎♣——_🐚😨,说服调解人🎋——😀😐、仲裁员或者法官*||🦥🎋。
索赔报告最好分为工期索赔和费用索赔两个不同的报告🐲🐂-——🌥🎏,不要因一个索赔的否定而影响另外一个同时就得不到发包人的认同🪆🐡|😏🐓。
索赔报告应当充分🌺--🪶🌑、全面🐲-😌、提出重点🎿|_😮🎁,结构严谨🦢-🐩,层次分明;用语应当流畅🦅😰——|😍😪,用词准确😞——🏉、简洁*🍁_🪅,争取以理服人🥍🐼-😾,索赔报告的格式🤡_——🎋,因索赔计算方法的不同而有所不同🐤🌼_🥉,现在以每类索赔事件分别计算的方式来书写索赔报告🐞🐭|🦏。
一🤯——-🌷、索赔事件概述🤤😉-🤥🦑:
首先是对事件的一个整体叙述🐕——*,对整个事件的时间🌾😷-_🐔🐔、地点🐹|_🦄🦠、原因🧧🐕——🐲、事件背景🤧🦝|——🦓😥、合同背景🐇*__🐷🏒、过程进行表述🦮||🌺🦉,承包人作出的努力😌-🦆,事件造成的结果等概括表述🐃🧿_-🦒。使观看文件者对索赔事件有一个完整了解🥋🦜_😗。
二🦀-🎿🐍、每个索赔事项
1😷🐁__😂🎴、具体事项发生与处理过程🌵-⚡️,提出索赔的时间等;
2🌿🐏_😥👻、证据部分🐆👽——_🏆🙈,该索赔依据的一切相关资料🐥_🦝🦘,如🦟_🥇:合同条款🪢_|🦈🎏,索赔通知书😣_🎴🐕、发包人及工程师的通知🦭|🐉、工程记录等🐅——🦜🥅。
3🦭-🦆、索赔要求和计算👻|🎭🦃,索赔事项造成的人工费用🐦——🐇♟、材料费用🐹——🎽🐲、机械费用🐘|_🍄🌑、管理费用的总和🪄-🌩。
4🎎🎳|🐑🦔、论证🛷🐯——🤣🐟,以事实为依据🐨🎇|🐋,根据合同和法律的规定😪——|😋🌷,说明要求工期延长🏏🍀_-🐭💫、费用赔偿的合理性🐟——🐐,要把事实和证据等方面的材料集中起来🌔🌳_-😩🌲,使之系统化🦦🦌_🎎🦓、条理化🌖🌸——😰🛷,最后写成观点正确🐱|🐐♥、论据充分💐-_😄、说理透彻😬🌼——🏏、条理清楚😙||*、层次分明🦆-——🎯🤪,具有说服力的论证部分🐪🌾||🐰。
三🐞-🎖、索赔报告编写人员
四🦒-🎗、签字盖章
五🐱-🤿、对方签收盖

css权威指南-基本视觉格式化(水平与垂直)_html/css_WEB-ITnose
(1)正常流🎍🙁|-🦩:是指西方语言文本从左向右🪢-*🐤,从上向下显示🧸_🐄。如果要让一个元素不在正常流中国♣🐳_-😈🏈,唯一的办法
就是使之成为浮动或定位元素🦉🐃——🌳🐕。
(2)非替换元素*♠|🦑🎿:如果元素的内容包含在文档中🤡||🦀🎍,则称之为非替换元素🌸🌺--🐖。
(3)替换元素🦒——👽:指用作为其他内容占位符的一个元素🪅——😴。例子🐝😾-——🍂🐖:img中的图像
(4)块级元素🎿🎨|😙:在正常流中🤒🌍|😩,会在其框之前和之后生成“换行”
所以出于正常流中的块级元素会垂直摆放😏__🌍🪲。
(5)行内元素🪲-_🎣☘:不会再之前或之后生成行分隔符🌳🐤|🦒😪,它们是块级元素的后台🌺-|🏓。
(6)根元素🐤🐖_*🐏:位于文档树顶端的元素🐲|🐱*。在HTML中🦊🐝_🌷,就是元素HTML🧧_-😶。
2.水平格式化
通常我们指的元素的宽度🤨--🌝,指的是其内容的宽度😖🦓_🔮,不包括内补💥🎐——🐘,外补🪰|🌻,边🦅🌵-🐏。
这七个水平属性的总和要等于父元素的width🎈__😁。
这里面只有width,margin-left,margin-left这三个可以设置为🙂-——🦇:auto
其他都必须设为特定的值或者默认宽度为0.
下面就以这三个auto的组合来展现问题🦡——🎃:auto会自动补齐宽度(屏幕总宽度1366)
设置margin-left为auto:
水平格式化
设置margin-right为auto:
水平格式化
设置width为auto:
水平格式化
设置margin-left和margin-right为auto:
水平格式化
设置margin-left和margin-right和width都为auto:
水平格式化
设置margin-left和margin-right和width都不为auto:
水平格式化
下面会遇到一种复杂特殊奇怪的现象😤🥌——😂*‍❄:那就是外边距可以是负值
zqzqzq
可以看出来宽度是440(width;auto这里440是实时计算的值🎎🌿——🦆,而不是显示的指定的值🐫🌈_☘️*,
其实这里涉及到一个问题*⚡️——-🐚🐵:有些是实时计算的值☄️_-🐈‍⬛,有些DOM可以获取实时计算的值😻——_🌏🐭。)😍☺️__🔮🦟,比父400还要宽😂_😐🐏!说好的不能比父元素宽呢?
但是这个计算没有错误🐽🐿-|🔮🦕:
10+0+0+440+0+0-50=400
最终还是等于400🤑——🌨🤨。
前面说的都是费替换元素的水平格式化🤩🌺_|🥅🦠,下面来说替换元素的水平格式化🌲_🦒💫。( 典型的替换元素就是img)
示例图片✨|-🐸😰:w:200px,h:300px.
当我们改变她的宽度的时候😦☁️|🏆,高度也同比例改变🦈🌨|🐋🤓。
200x300
300x450
3.垂直格式化
一个元素的默认高度由其内容决定🍀😧|🐐⚾。
高度还会受到内容宽度的影响😖🌒-_🪴🦄。
段落越窄⛈🐍_🪢🕊,相应的就会越高⭐️🌳-|🐟,以便容纳其中所有的内联内容🐕-_🐯🤔。
对应于水平格式化🎄|——🦡,它也有7个属性✨_-🐚:
margin-top,border-top,padding-top,height,padding-bottom,border-bottom,margin-bottom.
同样这七个值必须等于包含元素块的高🦐🦣_——🐓。
这七个值中只有三个值可以设为auto:height,margin-top,margin-bottom,其他四个必须设为特定的值或默认为0.
当高度小于显示内容的高度🌦-😂:浏览器会处理为有个滚动条(overflow)😬☁️-🌖,以容纳下内联元素🦗_-🦏🐭。
垂直格式化的另一个重要的是合并垂直外边距(重叠垂直外边距)
相邻列表之间的距离是15px,不是25px😥🍂_🌪。
因为相邻的外边距沿着垂直方向合并了🏑——🌥,大边距覆盖小边距🦆🐕‍🦺——🐾🌾。