delphi中double型转化成int型的问题

时间:2021-07-04 14:55:15
请教达人,delphi中有没有一个函数可以直接把double类型转换成int型啊?

我只知道strtofloat可以把string类型的转换成float型的。

22 个解决方案

#1


强制类型转换:Integer(DoubleValue);

不过似乎无实际意义。

可以用函数去尾或四舍五入

#2


抱歉: 强制类型转换:Integer(DoubleValue); 不能用。说一下你想得到什么效果。或者你直接用函数,去尾或四舍五入。

#3


比如i是各int型的,temp1是个double型的数组,现在我要把temp1中的数据赋值给i,我要怎么写?
用函数去尾也可以啊,不过有没有直接的函数可以去尾啊?

#4


I := Trunc(Temp1[下标]);//去尾

I := Round(Temp1[下标]);//四舍五入

#5


发现执行程序时有错误,我原程序中其实是在一个SQL语言中用到
SQL是这样的,
SQL.ADD('update FXSJ set RXSP=1 where ZYID=Trunc(fx[i,0])');
ZYID是个int型的,fx[i,0]是个double型的数据,但是系统报错是“i,0附近有语法错误”,请达人帮我看看错在哪里啊?谢谢!

#6


呵.....你不能把Trunc(fx[i,0])放在SQL语句外面啊?

SQL.ADD(Format('update FXSJ set RXSP=1 where ZYID=%d',[Trunc(fx[i,0])]));

#7


还是不行啊,编译通不过,报错了
[Error] Unit1.pas(250): Too many actual parameters

#8


你确定fx是一个二维数组吗?

#9


是啊,我定义的是fx:array of array of double;

#10


把代码整个地全部地贴出来。

#11


for i:=0 to m-1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('update FXSJ set RXSP='+FormatFloat('#.###',fx[i,1]));
      SQL.Add(', ZXCJ='+FormatFloat('#.###',fx[i,2]));
      SQL.Add(', BYSP='+FormatFloat('#.###',fx[i,3]));
      SQL.Add(', ZGPJ='+FormatFloat('#.###',fx[i,4]));
      SQL.Add(', YHPJ='+FormatFloat('#.###',fx[i,5]));
      SQL.Add(', ZLPJ='+FormatFloat('#.###',fx[i,6]));

      SQL.Add(' where ZYID=fx[i,0]');
      ExecSQL;

      Close;
      SQL.Clear;
      SQL.Add('select NJ, XY, ZY,');
      SQL.Add('RXSP, ZXCJ, BYSP,');
      SQL.Add('ZGPJ, YHPJ, ZLPJ from FXSJ');
      Open;

    end;
全部的代码很长,以上是这一部分的,怀疑就是where ZYID=fx[i,0]出现错误了,如果把这一句换成where ZYID=1 就可以的。

#12


你不是说RXSP是整型的字段吗?干嘛又用FormatFloat?FormatFloat返回带小数点的。

#13


并且,你把fx直接放到SQL语句中,你希望SQLServer知道你的fx是什么东东?

#14


之前的RXSP是个int型的,我只是打了个比方。
上面的一带代码中除了ZYID是个int型的,其他几个都是float型的。
我就是怀疑where这句错误了,可是我不知道怎么写闹。

比如fx[i,0]的值为1,我希望SQLServer查询到ZYID值为1的那一组记录

#15


试一下:

    begin
      Close;
      SQL.Clear;
      SQL.Add('update FXSJ set RXSP='+FormatFloat('0',fx[i,1]));
      SQL.Add(', ZXCJ='+FormatFloat('0',fx[i,2]));
      SQL.Add(', BYSP='+FormatFloat('0',fx[i,3]));
      SQL.Add(', ZGPJ='+FormatFloat('0',fx[i,4]));
      SQL.Add(', YHPJ='+FormatFloat('0',fx[i,5]));
      SQL.Add(', ZLPJ='+FormatFloat('0',fx[i,6]));

      SQL.Add(' where ZYID='+FormatFloat('0',fx[i,0]));
      ExecSQL;

用Format也可以,用FormatFloat也可以,还有其它函数可以用。不过要用得正确。
上面是假设你的上述字段都是整型

#16


哦,那你就只把
SQL.Add(' where ZYID=fx[i,0]');
这句,改为:

SQL.Add(' where ZYID='+ FormatFloat('0',fx[i,0]));//进位

或者:

SQL.ADD(Format(' where ZYID=%d',[Trunc(fx[i,0])]));//去尾。这个写法前面早已说过了

#17


SQL.Add(' where ZYID='+FormatFloat('0',fx[i,0]));
这样写是对的,可以实现了,呵呵,谢谢啊!

不过还有一个问题,就是我要把RXSP返回带3个小数点的值要怎么样实现啊,我原来的语句‘set RXSP='+FormatFloat('#.###',fx[i,1]));好像还是返回一个不带小数点的,奇怪!

#18


formatfloat('0.000',fx[i,1])


加分,结贴!(十分太少了!差点让你晕死呢)

#19


formatfloat('0.000',fx[i,1])也不行啊,而且这个和我用#不是一样的吗?

#20


一样。

你试一下,是不是你要的效果


procedure TForm1.Button1Click(Sender: TObject);
var
  x: double;
begin
  x := 98.12345678;
  showmessage(formatfloat('0.000',x));//98.123
end;

#21


哦,那我在试试吧,谢谢啊,
以后我会记得多加点分的,呵呵

#22


无所谓。并不是希罕你那点分。

#1


强制类型转换:Integer(DoubleValue);

不过似乎无实际意义。

可以用函数去尾或四舍五入

#2


抱歉: 强制类型转换:Integer(DoubleValue); 不能用。说一下你想得到什么效果。或者你直接用函数,去尾或四舍五入。

#3


比如i是各int型的,temp1是个double型的数组,现在我要把temp1中的数据赋值给i,我要怎么写?
用函数去尾也可以啊,不过有没有直接的函数可以去尾啊?

#4


I := Trunc(Temp1[下标]);//去尾

I := Round(Temp1[下标]);//四舍五入

#5


发现执行程序时有错误,我原程序中其实是在一个SQL语言中用到
SQL是这样的,
SQL.ADD('update FXSJ set RXSP=1 where ZYID=Trunc(fx[i,0])');
ZYID是个int型的,fx[i,0]是个double型的数据,但是系统报错是“i,0附近有语法错误”,请达人帮我看看错在哪里啊?谢谢!

#6


呵.....你不能把Trunc(fx[i,0])放在SQL语句外面啊?

SQL.ADD(Format('update FXSJ set RXSP=1 where ZYID=%d',[Trunc(fx[i,0])]));

#7


还是不行啊,编译通不过,报错了
[Error] Unit1.pas(250): Too many actual parameters

#8


你确定fx是一个二维数组吗?

#9


是啊,我定义的是fx:array of array of double;

#10


把代码整个地全部地贴出来。

#11


for i:=0 to m-1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('update FXSJ set RXSP='+FormatFloat('#.###',fx[i,1]));
      SQL.Add(', ZXCJ='+FormatFloat('#.###',fx[i,2]));
      SQL.Add(', BYSP='+FormatFloat('#.###',fx[i,3]));
      SQL.Add(', ZGPJ='+FormatFloat('#.###',fx[i,4]));
      SQL.Add(', YHPJ='+FormatFloat('#.###',fx[i,5]));
      SQL.Add(', ZLPJ='+FormatFloat('#.###',fx[i,6]));

      SQL.Add(' where ZYID=fx[i,0]');
      ExecSQL;

      Close;
      SQL.Clear;
      SQL.Add('select NJ, XY, ZY,');
      SQL.Add('RXSP, ZXCJ, BYSP,');
      SQL.Add('ZGPJ, YHPJ, ZLPJ from FXSJ');
      Open;

    end;
全部的代码很长,以上是这一部分的,怀疑就是where ZYID=fx[i,0]出现错误了,如果把这一句换成where ZYID=1 就可以的。

#12


你不是说RXSP是整型的字段吗?干嘛又用FormatFloat?FormatFloat返回带小数点的。

#13


并且,你把fx直接放到SQL语句中,你希望SQLServer知道你的fx是什么东东?

#14


之前的RXSP是个int型的,我只是打了个比方。
上面的一带代码中除了ZYID是个int型的,其他几个都是float型的。
我就是怀疑where这句错误了,可是我不知道怎么写闹。

比如fx[i,0]的值为1,我希望SQLServer查询到ZYID值为1的那一组记录

#15


试一下:

    begin
      Close;
      SQL.Clear;
      SQL.Add('update FXSJ set RXSP='+FormatFloat('0',fx[i,1]));
      SQL.Add(', ZXCJ='+FormatFloat('0',fx[i,2]));
      SQL.Add(', BYSP='+FormatFloat('0',fx[i,3]));
      SQL.Add(', ZGPJ='+FormatFloat('0',fx[i,4]));
      SQL.Add(', YHPJ='+FormatFloat('0',fx[i,5]));
      SQL.Add(', ZLPJ='+FormatFloat('0',fx[i,6]));

      SQL.Add(' where ZYID='+FormatFloat('0',fx[i,0]));
      ExecSQL;

用Format也可以,用FormatFloat也可以,还有其它函数可以用。不过要用得正确。
上面是假设你的上述字段都是整型

#16


哦,那你就只把
SQL.Add(' where ZYID=fx[i,0]');
这句,改为:

SQL.Add(' where ZYID='+ FormatFloat('0',fx[i,0]));//进位

或者:

SQL.ADD(Format(' where ZYID=%d',[Trunc(fx[i,0])]));//去尾。这个写法前面早已说过了

#17


SQL.Add(' where ZYID='+FormatFloat('0',fx[i,0]));
这样写是对的,可以实现了,呵呵,谢谢啊!

不过还有一个问题,就是我要把RXSP返回带3个小数点的值要怎么样实现啊,我原来的语句‘set RXSP='+FormatFloat('#.###',fx[i,1]));好像还是返回一个不带小数点的,奇怪!

#18


formatfloat('0.000',fx[i,1])


加分,结贴!(十分太少了!差点让你晕死呢)

#19


formatfloat('0.000',fx[i,1])也不行啊,而且这个和我用#不是一样的吗?

#20


一样。

你试一下,是不是你要的效果


procedure TForm1.Button1Click(Sender: TObject);
var
  x: double;
begin
  x := 98.12345678;
  showmessage(formatfloat('0.000',x));//98.123
end;

#21


哦,那我在试试吧,谢谢啊,
以后我会记得多加点分的,呵呵

#22


无所谓。并不是希罕你那点分。