精华内容
下载资源
问答
  • 【.NET】算术运算导致溢出

    千次阅读 2018-11-02 13:18:21
    System.OverflowException 算术运算导致溢出 编译时 运行时

    System.OverflowException

    算术运算导致溢出

    编译时

    运行时

    展开全文
  • pl/sql developer执行SQL时没有问题 在C#程序里确报算术运算导致溢出

    【问题】

    SQL:

    select XH,ZBMC,ZBBZMS,SJZ,ABS(SJZ-ZBBZZ) BZBZCY from (
    select X.XH,X.ZBMC,X.ZBBZMS,X.ZBBZZ,
    (case when XH=1 then (XM1-XM2)/XM3 
          when XH=2 then (XM4-XM5)/XM6 
          when XH=3 then (XM7-XM8)/XM9
          when XH=4 then (XM10-XM11)/XM12
          when XH=5 then XM13/XM14
          when XH=6 then (XM15+XM16+XM17)/(XM18+XM19+XM20) 
          when XH=7 then XM21/XM22
          when XH=8 then XM23/XM24
          when XH=9 then XM25/XM26
          when XH=10 then XM27/XM28
          when XH=11 then (XM29-XM30)/XM31
          when XH=12 then XM32/(XM33-XM34)
          when XH=13 then XM35/XM36*XM37
          when XH=14 then (XM38-XM39)/XM40
          when XH=15 then XM41/XM42
          when XH=16 then (XM43-XM44)/XM43  
          when XH=17 then XM45/XM46
          when XH=18 then XM47/XM48
          when XH=19 then XM49/XM50
          when XH=20 then XM51/XM52 
          when XH=21 then XM53/XM54               
    end) SJZ  from JGZBXM X  left join JGZBSJ S on S.YF=:TJYF
    )


     pl/sql developer执行SQL时没有问题

    在C#程序里确报算术运算导致溢出。


    【分析】

    1、排除数据为0的原因

    2、百度后 Oracle的精度和C#之间的精度是不一致的

    【结论】

    涉及到“除”的SQL语句语句的时候,都可用用round来把精度降低 。

    展开全文
  • 因此在代码中检测是否溢出是一件很有必要的事,那么该如何检测算术运算中的溢出呢?以C语言中的算术乘法为例,可以使用以下的代码检测是否有溢出://判断a与b的乘积是否溢出,是返回-1,否返回0 int overflow(int a,...

    在编写代码的过程中,算术溢出是一件让人十分头疼的事。因此在代码中检测是否溢出是一件很有必要的事,那么该如何检测算术运算中的溢出呢?

    以C语言中的算术乘法为例,可以使用以下的代码检测是否有溢出:

    //判断a与b的乘积是否溢出,是返回-1,否返回0
    int overflow(int a,int b)
    {
        int temp=a*b;
        temp/=b;
        return temp==a?0:-1;
    }

    在函数中,首先计算a与b的乘积temp,然后再计算temp除以b。如果得到的结果是a的话,那么就没有溢出,否则运算过程中发生了溢出。诚然,该函数可以有效地检测算术乘法是否溢出,但是对于CPU来说,除法的开销相对于加法、移位等操作来说是非常大的,因此我们应该尝试避免。

    在这里,我们尝试使用汇编语言来判断算术运算中的溢出。

    首先,让我们来了解一些背景知识。

    • CPU中维护着一组条件码,描述了最近的算术运算或逻辑运算的属性。常见的有:
      • CF(carry flag) 进位标志。最近的操作使最高位产生了进位。
      • ZF(zero flag)零标志。最近的操作得到的结果为0。
      • SF(sign flag)符号标志。最近操作得到的结果为负数。
      • OF(overflow flag)溢出标志。最近操作得到的结果导致一个补码溢出。
    • 汇编语言中SET指令根据条件码的组合,将一个字节设置为0或1。

    9f2980074d75ed3452446b86cd68af3d.png

    在这里,我们的目标是读取到OF这个标志位。但是在上表中,并不能单独地把OF标志位存到寄存器中。仔细观察后可以发现,上表中可以设置SF^OF(setl)和SF(sets)这两个标志位,而(SF^OF)^SF=OF!因此,我们只需要将使用setl和sets指令设置两个寄存器的值,然后再将这两个寄存器中的值异或就可以得到OF标志位的值。

    话不多说,让我们开始吧! 首先编写SignedOverflow.c文件:

    int SignedOverflow(int a,int b)
    {
        return a*b;
    }

    使用gcc -Og -S SignedOverflow.c命令产生的汇编文件如下:

    .file   "SignedOverflow.c"
        .text
        .globl  SignedOverflow
        .def    SignedOverflow; .scl    2;  .type   32; .endef
        .seh_proc   SignedOverflow
    SignedOverflow:
        .seh_endprologue
        movl    %ecx, %eax
        imull   %edx, %eax
        ret
        .seh_endproc
        .ident  "GCC: (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 7.3.0"

    然后我们在此基础上实现检测溢出的函数:

    .file   "SignedOverflow.c"
        .text
        .globl  SignedOverflow
        .def    SignedOverflow; .scl    2;  .type   32; .endef
        .seh_proc   SignedOverflow
    SignedOverflow:
        .seh_endprologue
        movl    %ecx, %eax
        imull   %edx, %eax          ;计算%edx与%ecx的乘积
        sets    %r10b               ;设置%r10b寄存器的值为SF
        setl    %r11b               ;设置%r11b寄存器的值为SF^OF
        xorb    %r10b, %r11b        ;异或%r10b与%r11b得到OF结果存在%r11b中
        movl    $0,   %eax          ;将返回值置为0
        movl    $-1,   %r10d         ;%r10d的值置为-1
        testb   %r11b,  %r11b       ;测试%r11bOF
        cmovne  %r10d, %eax         ;如果%r11b不为0将返回值置为-1
        ret                         ;函数返回
        .seh_endproc
        .ident  "GCC: (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 7.3.0"

    编写完成后,使用gcc -Og -c SignedOverflow.s生成SignedOverflow.o目标文件。

    再编写测试函数main.c:

    #include <stdio.h>
    
    //判断a与b的乘积是否溢出,是返回-1,否返回0
    int SignedOverflow(int a,int b);
    
    int main()
    {
        int a=0x7FFFFFFF,b=2,ans;
        ans=SignedOverflow(a,b);            //预期结果为溢出
        printf("%dn",ans);
        a=0x3FFFFFFF,b=2;
        ans=SignedOverflow(a,b);            //预期结果为不溢出
        printf("%dn",ans);
        return 0;
    }

    使用gcc -Og main.c SignedOverflow.o得到可执行文件a.exe。执行a.exe得到结果:

    -1
    0

    大功告成!

    展开全文
  • 用户代码未处理 System.OverflowException HResult=-2146233066 Message=算术运算导致溢出。 文章:https://bbs.csdn.net/topics/391851861?list=lz 有可能是sql写的数字精度不一致问题 程序最后自己好的,...

    执行sql语句时报错:

    用户代码未处理 System.OverflowException
    HResult=-2146233066
    Message=算术运算导致溢出。

     

    文章:https://bbs.csdn.net/topics/391851861?list=lz

     

    有可能是sql写的数字精度不一致问题

    程序最后自己好的,没有排查出原因。

     文章:C# 连接ORACLE数据库,执行查询提示“算术运算导致溢出。”

    微软的帮助:关于异常的疑难解答:System.OverflowException

     

    select DATEDIFF(ns,'1091-01-01',GETDATE())

    datediff 函数导致溢出。用于分隔两个日期/时间实例的日期部分的数字太大。请尝试使用日期部分精度较低的 datediff。

    执行以上函数是会发生异常的。

     

    转载于:https://www.cnblogs.com/Tpf386/p/9255460.html

    展开全文
  • Oracle C#的"算术运算导致溢出"错误

    千次阅读 2017-04-22 17:18:09
    今天遇到了C#执行查询语句时的一个坑,一个查询SQL老是报“算术运算导致溢出。”错,但这个SQL直接在pl/sql中是可以执行的,直接上百度,结果发现有兄弟遇到过,顺利解决。主要原因就是Oracle的精度和C#之间的...
  • 无符号数加法运算我们回忆一下十进制的加法,在小学的时候,我们是什么方式来计算加法的。10以内的加法全靠背,二位以上呢?对,用竖式表示:同类,我们也可以类推出二进制的竖式加法:使用前面我们提到的n位全加器...
  • 当程序尝试存储对于声明的整数类型而言太大的整数值时,...为什么发生整数溢出在最基本的级别上,当算术运算的结果需要比目标变量更多的位时,将发生整数溢出。例如,您可以存储在32位无符号整数变量中的最大数字是...
  • 算术运算(加减同优先级)不同,"与" "异或"“或”的优先级不同。 JAVA中: “与”>“异或”>“或” (3 | 1) & 2 = 2 3 | 1 & 2 = 3 与我们的习惯差异较大,建议多用括号。 2、位运算的单向性 ...
  • 二进制算术运算你好,在数字计算机和其它数字系统中,都会涉及到二进制算术运算。这一节主要介绍二进制加法、二进制减法、二进制乘法、二进制除法以及二进制反码、补码等知识。一 二进制加减乘除前面二进制的加减...
  • 昨天在C#执行oracle的sql语句时,总是报错,原先在pl/sql 执行sql语句是可以的,在C#执行就报“算术运算导致溢出”问题 SQL语句 select A.SKU_ID 商品标识,A.COLOR 货主编码,B.NAME 货主名称,C.NAME 商品名称,A.RCV...
  • 练习题为什么我们使用c = a + (b – a) / 2这个公式...如果恰巧窗口被放置到了一个极端的位置,例如(MAXLONG,MAXLONG),则公式中的算术运算可能出现溢出导致的结果是,中间点的坐标值可能计算错误。请注意,我们使...
  • 程序中的基本运算:算术运算:加、减、乘、除、取余按位运算:按位或“|”、按位与“&”、按位取反“~”、按位异或“^”移位运算:左移x<<k;右移x>>k逻辑移位:是指逻辑左移和逻辑右移,移出的空位...
  • 同事问了一个问题,访问oracle数据库,执行查询语句,提示”System.OverflowException: 算术运算导致溢出。“ 环境:c# + ORACLE 10g client  操作中他同时执行了多条sql语句,第一条 语句查询的是基础信息,可以...
  • ALU 全称为算数逻辑单元,是运算器的主要部件,能完成常见的位运算(左移、右移、与、或、非等)和算术运算(加减乘除等)。 状态字寄存器 存放运算状态(条件码、进位、溢出、结果正负等)和运算控制信息。 通用寄存器 ...
  • int code = (int)(long)lParam; 亲测可行
  • 其内部组成框图如下图该芯片的第一个组成部分是一个4位的算术逻辑运算部件ALU,它的输出为F,两路输入分别用R和S标记,还有送入ALU最低位的进位信号Cn,能实现R+S、S-R、R-S三种算术运算功能,和R∨S、R∧S、R∧S、R...
  • 在这里,你能学到一通百通的知识它们适用于任何一门语言 算术运算符是高级语言中,一种基本的运算符,它的作用与数学上的加减乘除一样。加减乘除很好理解,%是取余数的意思,也叫取模,如,5除以3,余数是2,那么5%3...
  • 如果是在fill datatable时报这个错,是因为所查询的数据中有在数据库中为NUMBER类型的字段,这种...//程序中使用这句会报溢出的错误  SELECT TO_CAHR(NUM) FROM SCOTT;//这样写就不会报错了 转载于:https://www.c...
  • ↖戳上方蓝字"PLC课程”关注我们哦!S7-200的数学运算指令有整数、双整数、实数数学运算指令。梯形图加/减运算指令采用...ØXXX为运算律标识:ADD、SUB、MUL、DIVØX为数据类型:I、DI、R一、加/减运算加/减运算指令...
  • 上一节介绍了如何用二进制来表示数字,表示和存储数字是计算机的重要功能,但真正的目标是计算、有意义地处理数字,这些操作由计算机的算术逻辑单元(Arithmetic and Logic Unit,ALU)处理。ALU是计算机的数学大脑...
  • 但是用oda.fill到dataset里面时就报错了:算术运算导致溢出。 数据有两列,其中一列是ID(1000以下),另一列是数值(最大的100W包含小数点后4位) 整个数据在1W条以内。我试着去了数据值列进行取值结果也是一样。 ...
  • 那么B=3 B=++A的意思是A=A+1,B=A,比如说A=3,那么B=4 注意:自增和自减属于单目运算符,常数和表达式不可以进行自增,自减的运算。例如3++和(x+3)++都是不合法的! 今天我们就学到这里,不知道这种根据实例的方法...
  • 算术运算导致溢出。 说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.OverflowException: 算术运算导致...
  • 目录:一、ALU二、算术单元(使用逻辑门)三、半加器四、全加器五、8位加法器六、逻辑单元一、ALU上一节介绍了如何用二进制来表示数字,表示和存储数字是计算机的重要功能,但真正的目标是计算、有意义地处理数字,...
  • 算术运算导致溢出。 说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.OverflowException: 算术运算导致...
  • 我的查询提取了两个字符串 – 根本没有数字类型,但Oracle客户端给了我上面的例外.有任何想法吗?这是查询 – 所有字段都是字符串:SELECT project_name, project_title, project_name as Job2, project_name as Job1...
  • 防抱死制动系统是汽车上一项主动安全系统,也就是我们常称的“ABS”制动系统,它是在常规刹车装置基础上改进而来的。想要真正了解防抱死是什么意思吗?想知道abs灯亮代表什么吗?接下来让我们来为大家进行解答。...
  • 未处理System.OverflowException HResult=-2146233066 Message=未处理System.OverflowException。 Source=DevExpress.Utils.v13.1 StackTrace: 在 DevExpress.Utils.FormShadow.HwndWrapper.EnsureHandle() ...
  • 程序就是加了个DotNetSkin.dll 来美化一下,就出错了。。。 [img=... 太奇怪了啊,有人用过这个DotNetSkin.dll来美化了吗?...你们是咋用的啊,不报错吗?

空空如也

空空如也

1 2 3 4 5 6
收藏数 102
精华内容 40
关键字:

算术运算导致溢出