請問如何將integer轉為double |
尚未結案
|
timhuang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
這個問題的原因是因為要使用千分位逗號的關係, 但是 %n 又僅能接受浮點數, 所以才有這樣的怪問題, 目前弟的作法是利用加上 0.0 就可以解決了, 這樣會強迫轉型為浮點數, 但是有沒有更好的作法, 可以提供給小弟...
|
Justmade
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
s:=Format('%.n',[a/1]); 補充一下,這只是我慣用的方法,軟能跟你的應是沒差。 若你想找一個標準的函數,我想應是沒有的,因為
1. 在 Help 的 "See Also" 通當都會列出相反的函數,但 Int,Round 等將 double 轉 integer 的卻沒有列函數integer轉為double 。
2. 在程式中經常會有計算中的integer轉為double , ,-,* Float 會轉, / 任何數字也會轉,Delphi 對這種自動轉換早已優化,無需要另用函數去轉換。 發表人 - Justmade 於 2003/04/14 23:25:37
|
timhuang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
引言: 若你想找一個標準的函數,我想應是沒有的,因為 1. 在 Help 的 "See Also" 通當都會列出相反的函數,但 Int,Round 等將 double 轉 integer 的卻沒有列函數integer轉為double 。 2. 在程式中經常會有計算中的integer轉為double , ,-,* Float 會轉, / 任何數字也會轉,Delphi 對這種自動轉換早已優化,無需要另用函數去轉換。誠如 Justmade 兄所言, 利用 , -, * 一個浮點數時, 會隱性轉型為浮點數, 用 / 任何數字時, 也會隱性轉型為浮點數, 這是 ok 的, 但是因為 format function 中的第二個參數是 array , 所以傳入的參數是不定的, 因此希望能有一個顯明的 function 來進行轉型, 但是如 Justmade 兄一般, 弟也找過相關的函數是沒有顯明的轉型 function, 也只能延用現在的方法了.. s:=Format('%.n',[a 0.0]); s:=Format('%.n',[a-0.0]); s:=Format('%.n',[a*1.0]); s:=Format('%.n',[a/1]); 以上四式皆同, 弟也測試其執行的效能, 發現幾無差異, 在弟的機器上跑, 一百萬次的時間, 大約都在 1.92 ~ 1.97 秒之間, 沒有一定那個比較快, 所以本題應該是可以結案了, 謝謝 Justmade 兄. ~~ |
timhuang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
補充一下, 要加上千分位逗號的功能, 除使用 s := Format('%.n',[123456 0.0]);
function Format(const Format: string; const Args: array of const):
string; 外, 另外可以使用 s := FormatFloat('#,##0',123456);
function FormatFloat(const Format: string; Value: Extended): string; 如此一來, 在 FormatFloat 中的參數傳入數字為整數或是浮點數都不會發生問題, 特別列出來給大家參考~~
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |