NUMBER Datatype

NUMBER Datatype

The NUMBER datatype stores zero as well as positive and negative fixed numbers with absolute values from 1.0 x 10-130 to (but not including) 1.0 x 10126. If you specify an arithmetic expression whose value has an absolute value greater than or equal to 1.0 x 10126, then Oracle returns an error. Each NUMBER value requires from 1 to 22 bytes.

Specify a fixed-point number using the following form:

NUMBER(p,s)

where:

  • p is the precision, or the total number of significant decimal digits, where the most significant digit is the left-most nonzero digit, and the least significant digit is the right-most known digit. Oracle guarantees the portability of numbers with precision of up to 20 base-100 digits, which is equivalent to 39 or 40 decimal digits depending on the position of the decimal point.

  • s is the scale, or the number of digits from the decimal point to the least significant digit. The scale can range from -84 to 127.

    • Positive scale is the number of significant digits to the right of the decimal point to and including the least significant digit.

    • Negative scale is the number of significant digits to the left of the decimal point, to but not including the least significant digit. For negative scale the least significant digit is on the left side of the decimal point, because the actual data is rounded to the specified number of places to the left of the decimal point. For example, a specification of (10,-2) means to round to hundreds.

Scale can be greater than precision, most commonly when e notation is used. When scale is greater than precision, the precision specifies the maximum number of significant digits to the right of the decimal point. For example, a column defined as NUMBER(4,5) requires a zero for the first digit after the decimal point and rounds all values past the fifth digit after the decimal point.

It is good practice to specify the scale and precision of a fixed-point number column for extra integrity checking on input. Specifying scale and precision does not force all values to a fixed length. If a value exceeds the precision, then Oracle returns an error. If a value exceeds the scale, then Oracle rounds it.

Specify an integer using the following form:

NUMBER(p)

This represents a fixed-point number with precision p and scale 0 and is equivalent to NUMBER(p,0).

Specify a floating-point number using the following form:

NUMBER 

The absence of precision and scale designators specifies the maximum range and precision for an Oracle number.

Table 2-2 show how Oracle stores data using different precisions and scales.

Table 2-2 Storage of Scale and Precision

Actual DataSpecified AsStored As

123.89

NUMBER

123.89

123.89

NUMBER(3)

124

123.89

NUMBER(6,2)

123.89

123.89

NUMBER(6,1)

123.9

123.89

NUMBER(3)

exceeds precision

123.89

NUMBER(4,2)

exceeds precision

123.89

NUMBER(6,-2)

100

.01234

NUMBER(4,5)

.01234

.00012

NUMBER(4,5)

.00012

.000127

NUMBER(4,5)

.00013

.0000012

NUMBER(2,7)

.0000012

.00000123

NUMBER(2,7)

.0000012

1.2e-4

NUMBER(2,5)

0.00012

1.2e-5

NUMBER(2,5)

0.00001

``` int RS232SendData( dword port, byte buffer[], long number,char DataType[] ) { byte ByteCrcBuffer[100]; toUpper(DataType, DataType, elcount(DataType));//统一转换为大写 if(number >= 100) { write("RS232 ByteCrcBuffer out of range"); number = 99; } ComFun_CopyBuffer(ByteCrcBuffer,0,buffer,number);//复制buffer给ByteCrcBuffer if(strstr(DataType, "HEX")!=-1)//发送数据字符格式中包含HEX,即16进制发送 { ComFun_ModbusCRC16(buffer,number);//计算将要发送的数据的CRC码:TxByteBuffer进行CRC校验 ByteCrcBuffer[number] = g_byCrcResult[1]; //CRC处理,然后追加低字节 number = number + 1; ByteCrcBuffer[number] = g_byCrcResult[0]; ///CRC处理,然后追加高字节 number = number + 1; if(0 == Rs232Send(port, ByteCrcBuffer, number)) //返回0-发送失败;返回1-发送成功 { writeLineEx(0,kERROR,"An error occurred during write of block of data to the serial port %d.", port); return 0; } else {//writeLineEx(0,kINFO, "Write block of bytes to serial port %d worked well.", port); return 1; } } else if(strstr(DataType, "TEXT")!=-1)//发送数据字符格式中包含TEXT,即文本形式发送 { if(0 == Rs232Send(port, ByteCrcBuffer, number)) //返回0-发送失败;返回1-发送成功 { writeLineEx(0,kERROR,"An error occurred during write of block of data to the serial port %d.", port); return 0; } else {//writeLineEx(0,kINFO, "Write block of bytes to serial port %d worked well.", port); return 1; } } else { write("发送数据格式错误,请检查内容或方式"); return 0; } // set state g_bySending = 1; }```请解释这个代码的内容
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值