请问如何把小数转成分数,如0.5->1/2;0.125->1/8;谢谢!
解决方案 »
- 全局热键问题之二
- 请教关于Delphi2010中字符长度的问题
- 请问各个小问题
- 菜鸟提问,关于组件的引用!
- 文件搜索函數:FindFirst的問題!
- 如何创建动态表,请用create table举例说明
- 狂郁闷,怎么回事,分不够还是没人会,还是我的问题太简单了,
- 关于dbgrid的问题
- 如何删除文件啊?大家帮帮我好不好???
- ★★★如何实现日期(2001-1-1)-日期(2000-1-1)为360天?★★★
- ***修改oracle数据库的口令,在delphi里怎么实现?请大家看看我的语句错在哪里?***
- 水晶报表DELPHI中的使用介绍很少,希望大家都来讨论一下,毕竟这是一个很好的做报表的软件,而且也很方便啊。
1、先通分,比如0.5->5/10;0.125->125/1000
2、再约分,5/10->1/2;125/1000->1/8;
关键是约分算法,需要点时间,我给你写写看
var
I: Integer;
begin
I := 2;
while I < N div 2 do
begin
if (N mod I = 0) and (D mod I = 0) then
begin
D := D div I;
N := N div I;
I := 2;
end;
end;
if D mod N = 0 then
begin
D := D div N;
N := 1;
end;
end;
var
I: Integer;
begin
if (Num1 <= 0) or (Num2 <= 0) then
raise Exception.CreateFmt('%d 和 %d 不是正整数,无法计算', [Num1, Num2]); if Num1 < Num2 then
begin
I := 2;
while I < Num1 div 2 do
begin
if (Num1 mod I = 0) and (Num2 mod I = 0) then
begin
Num2 := Num2 div I;
Num1 := Num1 div I;
Continue;
end;
Inc(I);
end;
if Num2 mod Num1 = 0 then
begin
Num2 := Num2 div Num1;
Num1 := 1;
end;
end
else if Num1 > Num2 then
begin
KillNum(Num2, Num1);
end
else begin
Num1 := 1;
Num2 := 1;
end
end;