首页 > 其他分享 >小数

小数

时间:2024-01-11 10:55:55浏览次数:20  
标签:-- NaN inf true 十进制 select 小数

float和double

float4 real 4bytes 精度 6个有效数字
float8 double precision 8bytes 精度 15个有效数字

如果输入数字的精度太高,那么可能发生四舍五入。 太接近零的数字,如果不能体现出与零的区别就会导致下溢错误。

精度损失。非常小的数会保存成0,无法准确存储0.1. 0.1 + 0.2 != 0.3

精度有损失。

任何十进制数字可以转换成3.1415... × 10n 的形式,同样的道理,任何十进制可以转换成二进制的形式,并表示成1.010101... × 2n的形式。所以计算机只要使用若干bit存储1.010101...(称为尾数),再用若干bit存储n(称为阶码)即可表示任何十进制小数。
精度损失发生的原因是十进制转换成二进制,M长度的0-9序列组成的十进制小数转换得到N长度的0和1序列组成的小数,其中N>M,甚至M有限长,但N会是无限长的情况。如果N大于计算机分配给存储尾数的bit数量,那么多出来的被截断,全部被解读成0,所以精度就发生了损失。
举例:
(0.1)10 = (0.000110011001100…)2
所以计算机无法精确的表示十进制的0.1。
注意事项:

  1. 两个浮点数做等值比较不能总是得到期望的结果。
    $2^{33}$
float double
alias float4
real
single
single precision
float8
double precision
storage size 4 bytes 8 bytes
significant digits 6 15

float和double支持正无穷大infinity、负无穷大negative infinity、非数字not-a-number。

3者的字面值需要用单引号包裹,依次是 'inf' '-inf' NaN

insert into "table" ("weight") values ('inf');
insert into "table" ("weight") values ('-inf');
insert into "table" ("weight") values ('NaN');

3者彼此之间以及与其他普通数字之间的关系如下:

NaN = NaN > inf = inf > 数字 > -inf = -inf

select 'NaN' = 'NaN'; -- true
select '-inf' = '-inf'; -- true
select 'inf' = 'inf'; -- true
select 'NaN' > 'inf'; -- true
select 'inf' > 0.0; -- true
select 0.0 > '-inf'; -- true

numeric

money decimal numeric

标签:--,NaN,inf,true,十进制,select,小数
From: https://www.cnblogs.com/LiuwayLi/p/17958067

相关文章

  • Python保留浮点数小数位数的几种常见方法
    1.使用round()函数:number=3.14159rounded_number=round(number,2)print(rounded_number)#输出:3.142.使用字符串格式化:number=3.14159formatted_number='{:.2f}'.format(number)print(formatted_number)#输出:3.143.使用字符串的f-string格式化:number=3.14......
  • freemarker 引擎模板保留两位小数,去尾法不进行四舍五入的方法
    ${4511.25?string("#.#")} 这个表达式的结果为4511.2;并不是传统的四舍五入规则;正确的应该是下面这个表达式:${4511.25?string("#.#;;roundingMode=halfUp")}这个表达式的结果为4511.3。而${4511.35?string("#.#")}  这个表达式的结果是4511.4FreeMarker默认的规则是5可能......
  • C语言中小数转字符串
    小数转字符串写之前,先来看看标准C?1小数转字符串--标准C2小数转字符串--非标准C写之前,先来看看标准C?其实,很多时候我们都会混淆一个概念:标准C?这里简要分享下,标准C其实就是ANSIC标准,里面收纳了绝大部分函数,但是人们发现有些经常使用的API没有被收纳,比如今天的主题–小数转字符串,所......
  • CMC-Oracle科学计数法转换控制小数显示位数
    当使用oracle进行数据计算时,当数据过小会出现科学计数法,例如:4.13693246457752E-6这个时候可以使用to_char函数进行数字位数控制SELECTTO_CHAR(number,'fmt')FROMDUAL; selecta.arrivalavgratearrivalavgrate1,to_char(a.arrivalavgrate,'FM9999990.00999......
  • 保留N为小数 不四舍五入
    constprecisionFormatEther=(value,prec=4)=>{if(!value||!Number.isInteger(Number(value))||Number(value)<0)return'0'letx,y,zx=formatEther(value.toString())y=x.indexOf('.')z=x.slice(y+1,y+prec+1)......
  • 【教3妹学编程-算法题】需要添加的硬币的最小数量
    3妹:2哥2哥,你有没有看到新闻,有人中了2.2亿彩票大奖!2哥 :看到了,2.2亿啊,一生一世也花不完。3妹:为啥我就中不了呢,不开心呀不开心。2哥 :得了吧,你又不买彩票,还是脚踏实地的好~3妹:小富靠勤,中富靠德,大富靠命,可能是我命不好。2哥 :哎,想我口袋只有几个硬币,叮咚作响。3妹:说到硬币,我......
  • C# 小数 ToString()
     floatnum=1.123F;stringresult=num.ToString("0.##");//1.12Console.WriteLine(result);result=num.ToString(".##");//1.12Console.WriteLine(result); num=......
  • bigdecimal保留两位小数
    1 publicclasstest1_format{2 publicstaticvoidmain(String[]args){3 BigDecimaldecimal=newBigDecimal("1.12345");4 System.out.println(decimal);5 BigDecimalsetScale=decimal.setScale(4,BigDecimal.ROUND_HALF_DOWN);6 Syste......
  • 子查询、Concat 字符拼接 ,Cast截取小数位 函数使用
    selectqh.CaseId,(selectsh.CaseIdfromServiceQuot.dbo.Headershwhereqh.QutoNo=sh.HeaderNo),qh.ApplierDate,qh.BU,qh.Site,qh.HeaderNo,qh.Currency(selectsh.CustomerfromServiceQuot.dbo.Headershwhereqh.QutoNo=sh.HeaderNo),qh.PN......
  • python保留小数点后几位的方法
    一、保留小数点后n位方法一:使用字符串格式化注意:使用字符串格式化后的是字符串格式a=12.3456print("%.3f"%a)#保留小数点后三位print("%.2f"%a)#保留小数点后两位输出12.34612.35方法二:使用round内置函数注意:使用round后的是浮点数格式a=12.3456a1=round(a......