以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  新年第一问,关于在Datalist中的数值显示!  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=1689)

--  作者:woodiy
--  发布时间:2009/1/26 21:00:00
--  新年第一问,关于在Datalist中的数值显示!

图片点击可在新窗口打开查看此主题相关图片如下:未命名iiiiiiii.jpg
图片点击可在新窗口打开查看

在Datalist是有一个合计金额的表达式列, 为什么有的时候显示正常,有的时候,确会显示很多位小数呢,而且值也不对啊?

另外,在Datalist中调整列位置以后如何保存呢,还有如何使用列表视图呢? 谢谢!

附名列类型表:


图片点击可在新窗口打开查看此主题相关图片如下:未命名iiiiiiii.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2009-1-26 21:11:16编辑过]

--  作者:程兴刚
--  发布时间:2009/1/28 9:15:00
--  
原因很简单:

   在输入数据前,要将列属性的小数位数指定,比如说两位小数,包括表达式列涉及的所有列(订单数量、单价、合计金额)在帮助中有说明:列属性的小数位数设置要在输入数据之前设置,因为设置该属性之前已经输入的数据的值不会改变(比如,指定为两位小数属性之前输入了数据2.34412345,修改后显示为2.34,实际值还是2.34412345,如果是先设置为两位小数,再输入数据2.34412345,其显示值和实际值均为2.34),因为狐表系统列属性设置一般都在设计过程中,不会对开发完成的用户造成任何影响,因为您提交给用户的系统应该是一个没有任何数据的系统,作为数据库管理软件的应用,注意一下即可!

 您的那一行数据因为微软的浮点运算错误造成,其中一个或两个的实际值并非整数,可能是一个循环小数,指定完列属性的小数位数,再重新输入即可!
[此贴子已经被作者于2009-1-28 9:19:09编辑过]

--  作者:czy
--  发布时间:2009/1/28 14:17:00
--  

如何实现四舍五入


表达式并没有提供传统的四舍五入函数Round,我们只能用Convert函数来间接实现。

例如金额列原来的计算公式为:

[数量] * [单价] * (1 - [折扣])

为了保留两位小数,可以将公式改为:

Convert([数量] * [单价] * (1 - [折扣]) * 100, \'System.Int64\') / 100

原理很简单:将计算结果乘以100,然后取整,最后除以100。

如果你要保留三位小数,将表达式中的100改为1000即可,其余类推。

视图我还不知道好方法,不过现在可以这样解决一下。

Tables("表A").OpenView("a")
Dim dst As WinForm.DataList = e.Form.Controls("DataList1")
dst.DataTable = DataTables("表A")
dst.Build()