社区
Delphi
帖子详情
一个实型数据的转换
NoMore
2012-09-08 10:11:05
一个实型数据如何以整型数据存储,有举例来看看。
...全文
170
11
打赏
收藏
一个实型数据的转换
一个实型数据如何以整型数据存储,有举例来看看。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
日立奔腾浪潮微软松下联想
2012-09-14
打赏
举报
回复
[Quote=引用 10 楼 的回复:]
直接赋值?
[/Quote]
差不多吧,不过Delphi有absolute:
var
d: double;
i: uint64 absoulte d;
begin
d := 1000.123;
// 保存i就是保存d了
end;
NoMore
2012-09-13
打赏
举报
回复
不会吧,总有办法吧。各位出出招吧。
lhy
2012-09-13
打赏
举报
回复
直接赋值?
日立奔腾浪潮微软松下联想
2012-09-13
打赏
举报
回复
可以把single当成cardinal,double当成uint64保存。
kaikai_kk
2012-09-13
打赏
举报
回复
用2个int字段,把一个实数拆开来分开存储? 是这意思吗?
那怎么行,比如10.0025,小数部分保存进去后是25,那当然不对了
说说为什么要这么做?
hsfzxjy
2012-09-13
打赏
举报
回复
楼主是说:12.345,a保存12,b保存345么
luck8000
2012-09-08
打赏
举报
回复
楼上说的已经非常详细了,如果仅仅想四舍五入的话,在原值上加上0.5,然后取整就可以,除非有特殊要求。
babydog01
2012-09-08
打赏
举报
回复
1.Round(四舍六入五留双)
功能说明:对一个实数进行四舍五入。(按照银行家算法)
例:
var
i, j: Integer;
begin
i := Round(1.5); // i等于2
j := Round(2.5); // j等于2
end;
在Delphi中使用Round函数得到的答案有时与我们所预期的会不太一样:采用的是四舍六入五留双。即当舍或入位大于或小于五时按四舍五入来处理
,而当舍或入位等于五时,就要看前面一位是什么,根据奇进偶不进,它总是返回一个偶数值。
例:
i:= Round(11.5)//i等于12
i:= Round(10.5)//i等于10
这种Round其实是按照银行家算法,统计学上一般都用这种算法,比传统的"四舍五入"要科学。
如果要使用传统的"四舍五入"方法,可以使用下面函数:
function RoundClassic(R: Real)
2.trunc(取得X的整数部分)
如:trunc(-123.55)=-123, floor(123.55)=123
3.ceil(取得大于等于X的最小的整数)
如:ceil(-123.55)=-123, ceil(123.15)=124
4.floor(取得小于等于X的最大的整数)
如:floor(-123.55)=-124,floor(123.55)=123
注:floor和ceil是math unit里的函数,使用前要先Uses Math
function Int(X: Extended): Extended;//取整 注意它返回的是Extended类型它也是浮点型哦
function Round(X: Extended): Int64;//四舍五入
function Trunc(X: Extended): Int64;//将小数无条件舍去
floor 直接往小的取,比如 floor(-123.55)=-124,floor(123.55)=123
trunc 直接切下整数,比如 trunc(-123.55)=-123, floor(123.55)=123
ceil 直接往大的取,比如 ceil(-123.55)=-123, ceil(123.55)=124
round 计算四舍五入,比如 round(-123.55)=-124,round(123.55)=124
floor 和 ceil 是 math unit 里的函数,使用前要先 Uses Math。
trunc 和 round 是 system unit 里的函数,缺省就可以用。
//真正的四舍五入
function myround(const yuan: Extended; const pp: Integer): Extended;
//yuan:原浮点数,PP保留 小数点后第几位
var
p,l,m,l2:Longint;
s:string; // 原浮点数
sq:string; // 小数点前
sh:string;//小数点后
begin
if yuan=0 then exit;// 原浮点数 0
if pp<0 then exit; //非法小数点后第几位
s:=floattostr(yuan);
p:=pos('.',s); //小数点位置
sq:=midstr(s,1,p-1);
sh:=midstr(s,p+1,length(s)-length(sq)-1);
l:=length(sh);//小数位数
l2:=length(sq);//整数位数
if pp>=l then
begin//0
result:=strtofloat(s);
exit;//比如 11。06 要保留到 小数点后第3位显然 不合理
end;//
{ if pp=l then //比如 11。06 要保留到 小数点后第2位不用处理 直接返回
begin//1
Result:=s;
exit;
end;//1 }
if pp<l then //比如 11。06 要保留到 小数点后第1位 ,。。。
begin//2
m:=strtoint(sh[pp+1]);
if m>=5 then
begin
if pp>=1 then //保留到 小数点后第1,2。。。位
begin//3
sh:=midstr(sh,1,pp);
sh := inttostr(strtoint(sh)+1);
if length(sh)>pp then
begin
sh:= midstr(sh,2,pp);
sq:= inttostr(strtoint(sq)+1);
end;
Result:=strtofloat(sq+'.'+sh);
exit;
end//3
else //保留到 小数点后第0位
begin//4
sq[l2]:=chr(ord(sq[l2])+1);
Result:=strtofloat(sq);
exit;
end;//4
end
else
begin
if pp>=1 then //保留到 小数点后第1,2。。。位
begin//3
sh:=midstr(sh,1,pp);
Result:=strtofloat(sq+'.'+sh);
exit;
end//3
else //保留到 小数点后第0位
begin//4
Result:=strtofloat(sq);
exit;
end;//4
end;
end;//2
end;
hsfzxjy
2012-09-08
打赏
举报
回复
小数部分不能用整型变量存取。。根本没这回事!
NoMore
2012-09-08
打赏
举报
回复
to babydog01
你的方法是如何取整。
我要的是把一个实型数据的整数部分和小数部分都用整型数据存储。怎么做??谢谢了
NoMore
2012-09-08
打赏
举报
回复
我的意思是:一个实型数据比如1000.123,把1000用整型类型存储,把.123变成整型数据用整型类型存储。怎么进行,可有更详细的做法???
C语言
数据
类型
转换
实例代码
数据
类型
转换
就是将
数据
(变量、表达式的结果)从一种类型
转换
到另一种类型。例如,为了保存小数你... //将
一个
常量
转换
为
实型
【示例】将整数
转换
为浮点数: #include int main(){ int sum = 17, count = 5; doub
组态王的
数据
类型
组态王的
数据
类型,详细的介绍,内存离散变量、I/O离散变量、2.内存
实型
变量、I/O
实型
变量
计算机知识大全学习好东西
实验四:栈与队列的应用 要求:1、应用栈实现判定
一个
字符串中...2、应用栈与队列实现将
一个
10进制
实型
数据
转换
为二进制
数据
。 目的:1、掌握对栈与队列基本操作的调用; 2、学会利用栈与队列解决问题。 提示:第一题:
C语言全书word版CHAR03
3.4
实型
数据
7 3.4.1
实型
常量的表示方法 7 3.4.2
实型
变量 8 3.4.3
实型
常数的类型 9 3.5 字符型
数据
9 3.5.1 字符常量 9 3.5.2 转义字符 9 3.5.3 字符变量 10 3.5.4 字符
数据
在内存中的存储形式及使用方法 10 ...
时间
转换
工具
把
实型
格式
数据
1349928000
转换
成字符串2012-10-11 12:00:00 或者20121011120000
Delphi
5,392
社区成员
262,732
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章