以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]什么原理?怎么提示值对于类型"Int16"太大?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=29239)

--  作者:skyhuigo007
--  发布时间:2013/3/2 22:10:00
--  [求助]什么原理?怎么提示值对于类型"Int16"太大?
看图
图片点击可在新窗口打开查看
板长、板宽、数量都是短整数的数据列,板长不可能超过500,板宽不可能超过300,数量不可能超过三位数,都是整数。平方是单精度小数的表达式列,表达式:板长*板宽*数量/10000  (板长板宽单位是厘米,平方单位是平方米,所以要除以10000,所以平方这列不可能超过7位有效数字,所以用单精度小数)
结果就提示值太大了。
然后把表达式改成:1*板长*板宽*数量/10000,竟然可以了!
然后再把数量改成整数的数据列,竟然也可以了!
似乎是计算的时候,板长*板宽,在板宽的数据列位置进行计算,然后前两者的计算值再放进数量列的位置进行计算,所以把数量列改成整数型,就放得下?
那么1*板长*板宽*数量/10000这个表达式的原理呢?
什么原理?小白无法理解~
虽然可以用“1*”解决,但是很好奇啊~~~
[此贴子已经被作者于2013-3-2 22:49:42编辑过]

--  作者:程兴刚
--  发布时间:2013/3/2 22:17:00
--  

长、宽、数量三列既然是短整数列,为何不输入整数?如果要输入小数,改为双精度小数列,可以满足一般要求,指定数据类型时不要过分抠门儿,满足一般使用为准!


--  作者:skyhuigo007
--  发布时间:2013/3/2 22:39:00
--  
厄,程老师,我表达式没写清楚,抱歉。表达式是:板长*板宽*数量/10000。
三个短整数列都是输入整数的,比如长190、宽60、数量55,单位是厘米,然后平方的单位是平方米,所以要再除以10000,可是还是提示数值太大~
三个列都不可能超过三位数,所以我用5位数的短整数。而计算后的数值也不可能超过7个有效数字。
然后奇怪的来了,表达式改成:1*板长*板宽*数量  或者  1*板长*板宽*数量/10000  都可以计算~

--  作者:程兴刚
--  发布时间:2013/3/2 22:44:00
--  

这个才应该是正确的表达式:

 

(isnull([板长],0)*isnull([板宽],0)*isnull([数量],0))/10000


--  作者:skyhuigo007
--  发布时间:2013/3/2 22:53:00
--  
(1*[长1]*[宽1]*[数1]+1*IsNull([长2],0)*IsNull([宽2],0)*IsNull([数2],0)+1*IsNull([长3],0)*IsNull([宽3],0)*IsNull([数3],0))/10000
以上是我可以计算的表达式,长、宽、数一共9列都是短整数,表达式列[平方]是单精度小数。
然后去掉“1*”就提示值太大~

程老师再看看我一楼发的,重新编辑过了。

解决方法已经有了,就是前面加个“1*”就可以了,但是很好奇这是什么原理啊~