读书人

为什么只能显示四位小数呢?该如何解决

发布时间: 2012-02-19 19:43:38 作者: rapoo

为什么只能显示四位小数呢?
delphi里怎么只显示4位小数啊?

代码如下

procedure TForm1.Button1Click(Sender: TObject);
var

m:variant;
begin
m:=1.162179;
edit1.text:=m;
end;
end.


结果edit1只显示了1.1622阿,后面的被四舍五入了
我把edit1.text:=m换成了edit1.text:=floattostr(m);也是一样啊
谁知道怎么让他显示完全

我是新手
谢谢


[解决办法]
用Real试试
[解决办法]
这是个传值中丢失精度的问题,,
procedure TForm1.Button1Click(Sender: TObject);
var

m:variant;
begin
m:=floattostr(1.162179);
edit1.text:=m;
end;
end.

这样就没问题了,,,
当然hongqi162(失踪的月亮的方法也是可行的....
[解决办法]
总结下,LS都可用。
[解决办法]
M数据类型问题!楼上的都说了!
[解决办法]
为什么会是四位, 楼上几位都没有回答.

这个问题比较经典, 在不同的delphi版本显示都有不同, 主要是牵涉到数据类别转换的优先级别.

在BDS2006中是可以正确的显示 1.162179, 从汇编码中就知道后台的转换
Unit1.pas.31: M := 1.162179;
00454BC7 DB2D184C4500 fld tbyte ptr [$00454c18]
00454BCD 8D45F0 lea eax,[ebp-$10]
00454BD0 E89FB7FBFF call @VarFromReal //这里知道是VarToReal的转换


在Delphi7中显示是 1.1622, 从汇编码中就知道后台的转换
Unit1.pas.31: M := 1.162179;
00454BC7 DB2D184C4500 fld tbyte ptr [$00454c18]
00454BCD 8D45F0 lea eax,[ebp-$10]
00454BD0 E89FB7FBFF call @VarFromCurr //这里知道是VarToCurr的转换, 而Currency只有四位的精度的

通过上面的对比可以知道, BDS2006与Delphi7的数据转换优先级别是一样, 看来BDS2006的数据转换与MS相同或是接近. MS SQL2000数据转换优先级别如下:

下面是 Microsoft® SQL Server™ 2000 数据类型的优先顺序:

sql_variant(最高)

datetime

smalldatetime

float

real

decimal

money (这里转换到delphi是就是Currency)

smallmoney

bigint

int

smallint

tinyint

bit

ntext

text

image

timestamp

uniqueidentifier

nvarchar

nchar

varchar

char

varbinary

binary(最低)



[解决办法]
学到

[解决办法]
有事没事定义数据类型还用variant.

读书人网 >.NET

热点推荐