关于溢出的问题

truecoffeefox 2014-06-18 11:18:53
数据库A有个表的主键是int类型
前端Flash传过来的是一个数值字符串有可能是比int的最大值大
写库是通过c写的一个程序,如果前端传的值大它就保存这个值得溢出值,就是个负数

现在要用.net将前端传回的这个值写入另一个库B中某表的int字段
这个时候怎么处理才能让它不报int值太大这种错误,而直接转成溢出后的值呢

笨办法是前端值转long和int最大值相减再加int负值最小


有啥简单点的好办法吗
...全文
202 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2014-06-18
  • 打赏
  • 举报
回复
所以考虑到数据库中数据有可能太大 要么直接定义个long型来保存,要么就干脆定义成string型算了. 反正你入库的时候拼接字符串,早晚也都是转成字符串的.
於黾 2014-06-18
  • 打赏
  • 举报
回复
判断int如果是负数,就强制转换成uint(无符号型) 或者不用判断int是什么,写入之前全部先转uint 不过此方法只适用于数据比Int取值范围大2倍以下的情况. 否则就不仅仅是变负数的问题了,那根本是丢失部分数据
tcmakebest 2014-06-18
  • 打赏
  • 举报
回复
楼主这是要将错就错吗?这种结果真是不知道会不会有其他问题,楼主慎重吧. int 的长度没有标准啊,下面假设楼主的int是16位的,将long变成int的方法.

long l = 32767 + 100;
byte[] bs = BitConverter.GetBytes(l);
int i = BitConverter.ToInt16(bs, 0);
bdmh 2014-06-18
  • 打赏
  • 举报
回复
后台存储可以考虑用varchar类型,你获取时转换
truecoffeefox 2014-06-18
  • 打赏
  • 举报
回复
引用 6 楼 dongxinxi 的回复:
long temp; int i = uncheck((int)long);
对啊,忘了unchecked
  • 打赏
  • 举报
回复
long temp; int i = uncheck((int)long);
truecoffeefox 2014-06-18
  • 打赏
  • 举报
回复
引用 2 楼 tcmakebest 的回复:
楼主这是要将错就错吗?这种结果真是不知道会不会有其他问题,楼主慎重吧. int 的长度没有标准啊,下面假设楼主的int是16位的,将long变成int的方法.

long l = 32767 + 100;
byte[] bs = BitConverter.GetBytes(l);
int i = BitConverter.ToInt16(bs, 0);
问题这个并不是我来决定怎么存的,这个呼叫中心的cti是另外的设备承包商,他们的东西已经如此实现了 我的系统需要对接他们的数据,前端给的一个long后端他们用的int来存

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧