SQL Server中Money型数据的输入问题(200大洋)(200分)

  • 主题发起人 主题发起人 sunxu
  • 开始时间 开始时间
S

sunxu

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾:
小弟存在Money型数据输入的问题。
在客户端的DBGrid中输入带四位小数的数据,结果是数据库中保存的
数据只有两位小数,为什么?(用Query控件则无此问题)
照理说Money型数据是可以达到四位小数的精度的,我该怎么做?
悬赏200大洋!

 
你用的是什么数据库?
 
只不过是显示了2位,money肯定是4位小数。只要你确定是这个类型。没错的,放心用。
 
个人看法:
Money类型从来没有用过,例外Delphi好像也不直接支持这种类型,
建议你添加一个自定义字段,类型为string,然后定义Format为####.####,
在DBGrid中你修改的实际上是这个String字段,然后在OnUpdate或者OnEdit
事件中修改你的money变量。另外,对于这种数值的修改,最好不要在Delphi
中完成,建议送到SQL里做,利用SQL函数发到服务器端完成,这样才能保证
格式的正确。我以前就是这么解决的datetime类型与Delphi 3不兼容的问题。
 
看一下控制面板中的区域设置中货币的设置。
 
DBGrid中字段类型为Currency应该没问题.
 
我用的是MS SQL Server 6.5 。
字段类型为Currency,DisplayFormat为#.0000。
修改数据后,在BeforePost和AfterPost事件中检查到的值带四位小数,
数据库中的数据却只有两位小数!
我马上试一下www和Dick的方法。对于各位大虾的热心帮助,本人深表
谢意!
 
这个问题我也遇到过,无论你的editformat,displayformat怎么写,系统都自动进
行设入,而只显示2位小数。
如wgzhang所言,DBGrid中字段类型设为Currency就可以啦,
如果你的东东是处理money的,系统自动保留2位小数应该足够了。
 
设置<b>CurrencyDecimals</b>这个系统级的变量应该就可以了.
 
Delphi使用Money字段时,内部确实是保留4位小数的,若想显示4位小数,
您只需将字段的Curreny属性置为False即可。
 
我已试着改过控制面板——区域设置——货币的设置,
改过CurrencyDecimals这个系统级的变量(为4),
将字段的Curreny属性置为False和True,
都不管用。
另外,与DJ讲的不同,我的数据显示倒是有4位小数的,只是输入后变为2位。
如:输入3.1234结果为3.1200。
Dick的方法应该是可行的,但还有简单些的方法吗?
各位大虾,出手吧!
 
印象中currency只使用两位
后面两位是算帐用的,
(只是印象)
 
你试试:
在money型字段中存入两个四位小数的值(a,b,用dbgrid),别能被整除,
select a/b as res from table
再放到dbgrid中,检查他的值对不对,
存放的是2位还是4位结果是不同的。
 
不如改用FLOAT
 
Dick的方法可行性有问题,因为实际保存数据的字段是money型的,当显示字段值时
又如何呢?还不如直接用String型的字段,不是更简单吗?我本人还未找到问题的
原因,还没有更好的方法,不过更倾向于3boy提出的方法,他不但使问题的处理简单
化,在数据的其它处理上更方便,更有通用性。
 
建议将货币类型改为实数类型,只是在输出时做点处理。
 
多人接受答案了。
 
后退
顶部