1樓:天地惶惶
在delphi中使用round函式得到的答案有時與我們所預期的會不太一樣:
採用的是四捨六入五留雙。即當捨或入位大於或小於五時按四捨五入來處理,而當捨或入位等於五時,就要看前面一位是什麼,根據奇進偶不進,它總是返回乙個偶數值。
示例 結果
i:= round(11.5) 12
i:= round(10.5) 10
這種round其實是按照銀行家演算法,統計學上一般都用這種演算法,比傳統的"四捨五入"要科學。
如果要使用傳統的"四捨五入"方法,可以使用下面函式:
function roundclassic(r: real): int64;
begin
result:= trunc(r);
if frac(r) >= 0.5 then
result:= result + 1;
end;
2樓:匿名使用者
四捨五入用 round 函式:
edit13.text:=inttostr(round(strtofloat(edit13.text)));
就可以了。
希望我的回答對你有幫助!
你寫的有錯---括號錯了(strtoint(edit10.text) ,應該是如下這樣:
edit13.text:=floattostr((strtoint(edit10.
text)+strtoint(edit11.text)+strtoint(edit12.text))/3);
3樓:匿名使用者
round 四捨五入
trunc 取整
4樓:房恩巨集
vb裡是round函式。del沒用過。
delphi為什麼沒有四捨五入函式?
5樓:鳳菡軒
我倒覺得用format不錯:
format('15.2f%',表示式)
15表示總位數,2表示小數點後的位數!
6樓:徐金柱第一
round()函式有個缺點如下:round(5.5)=6 ,round(6.5)=6
也就是說當最後一位為5時,四捨五入的進製與否與前一位的奇偶有關,故為避免這種情況最好還是自己寫 ,下面是本人寫的,有點羅嗦,希望能幫到你
//四捨五入保留小數點後len位數
function tsys_njqlrb_f.roundclassic(r: real;len:integer): real;
vari,j:integer;
str:string;
begin
if trunc(r)=r then
begin
result:= trunc(r);
exit;
end;
result:= trunc(r);
str:=(copy(floattostr(r),length(inttostr(trunc(r)))+2,len));
str:='0.'+str;
result:=result+strtofloat(str);
j:=1;
for i:=1 to len do j:=j*10;
if length(copy(floattostr(r),length(inttostr(trunc(r)))+2+len,1))<>0 then
begin
if strtoint(copy(floattostr(r),length(inttostr(trunc(r)))+2+len,1)) >= 5 then
result:= result + 1/j;
end;
end;
7樓:匿名使用者
round是四捨六入五留雙
delphi 可以再控制台四捨五入???求大神幫助
8樓:猴煙鈾
procedure tform1.button1click(sender: tobject); var a,b:
real; begin if (edit1.text='') or (edit2.text='') then begin showmessage('小數與保留小數字數不能為空'); end else begin a:
=strtofloat(edit1.text); b:=strtofloat(formatfloat(edit2.
text,a)); edit3.text:=floattostr(b); end; end; procedure tform1.
edit1keypress(sender: tobject; var key: char); begin if not (key in ['0'..
'9','.',#8]) then begin showmessage('請輸入乙個小數'); key:=#0; end else begin end; end; procedure tform1.
edit2keypress(sender: tobject; var key: char); begin if not (key in ['0','.
',#8]) then begin showmessage('請輸入以0.0...開頭的要保留的小數字數');//例:
保留2位數:0.00 key:
=#0; end else begin end; end;
delphi的四捨五入詭異bug?
9樓:匿名使用者
不是,實際上是使用的問題
trunc 的引數是extended
如果申明為
vara: extended;
就不會有問題,實際上是型別轉換後有誤差
10樓:見習書生
delphi 預設的四捨五入函式採用的是"銀行家四捨五入"法..
可能跟這個有關..
具體說不上來..
11樓:景茹煒
你的delphi版本有問題吧。在delphi2010下輸出正常:
procedure tform1.btnaddalarmclick(sender: tobject);
vara:extended;
begin
showmessage('trunc('+format('%3.6f',[211.66 /0.
38])+')='+floattostr(trunc(211.66 /0.38)));
a:=211.66;
showmessage('trunc('+format('%3.6f',[a /0.38])+')='+floattostr(trunc(a /0.38))); //readln;
end;
都是557
33四捨五入怎麼算是多少,3333四捨五入
30四捨五入是指四和四以下的捨去,五以及以上的進一現在末位是3,小於5,應該捨去,所以是30 33.33333333333四捨五入多少?你好,33.33333333333四捨五入到整數等於33因為十分位是3,根據四捨五入的規則,應該捨去。望採納。33.33333333333四捨五入約等於33。33....
整數怎麼四捨五入數學,數學,四捨五入是什麼意思,怎麼理解。
四捨五入法,就是在計算時取近似值的一種方法,顧名思義,比四小的 包括四 要捨棄,比五大的 包括五 要向前一位進一。例如 235四捨五入到十位 240 你的是幾位數 如果是2位數的話,個位是4或以下的就省去,是5或以上就進製 數學,四捨五入是什麼意思,怎麼理解。在取小數近似數的時候,如果尾數的最高位數...
為啥是四捨五入不是五舍六入,為什麼是四捨五入,而不是五舍六入如題
四捨五入是一種精確度的保留法,與其他方法本質相同。但特殊之處在於,採用四捨五入,能使被保留部分的與實際值差值不超過最後一位數量級的二分之一。假如0 9等概率出現的話,對大量的被保留資料,這種保留法的誤差總和是最小的。這大概也是我們使用這種方法為基本保留法的原因吧。對數量級 誤差等概念不清楚的話請看 ...