然而 MultiCharts 內建的數字顯示形式的功能,我只看到 :7:0 這類的方式,好像沒有看到以千分位加個逗號的形式?因此,自己就做了個函數,在數字最後要顯示在畫面上時,可以用千分位加逗號的文字型態來表現。
函數(回傳文字類型)名稱:_commaFormat。參數1;要被格式化的數值、參數2:保留顯示的小數位數。
input: price( Numeric ), floatDigits( Numeric );
var: j(0), floating(""), thePrice(""), output("");
array: integer[]("");
floating= NumToStr( price - IntPortion( price ), 10 );
thePrice= NumToStr( intportion(price), 0 );
for j=12 downto 2 begin
if RightStr( floating, 1 )="0" then
begin
floating= LeftStr( floating, j-1 );
value1= j;
end
else
begin
floating= MidStr( floating, 2, j-1 );
break;
end;
end;
value2= StrLen( thePrice );
array_setmaxindex( integer, _Digits( price )+2 );
for j=value2 downto 1 begin
integer[j]= MidStr( thePrice, j, 1 );
end;
output="";
for j=1 to value2 begin
if mod(j,3)=0 and j<>value2 then
output= "," + integer[value2-j+1] + output
else
output= integer[value2-j+1] + output;
end;
if floatDigits=0 then floating= "";
if floatDigits>0 then floating= MidStr( floating, 1, floatDigits+1 );
_commaFormat= output + floating;
這是簡單的效果示範:
上面的函數有使用到一個 _digits 的函數,是用來計算"幾位數"的,我去抄了某個內建函數的方式:
input: theNumber( Numeric );
Variables: Res(0);
if floor(theNumber/10000000000) > 0 then Res= 10
else if floor(theNumber/1000000000) > 0 then Res= 9
else if floor(theNumber/100000000) > 0 then Res= 8
else if floor(theNumber/10000000) > 0 then Res= 7
else if floor(theNumber/1000000) > 0 then Res= 6
else if floor(theNumber/100000) > 0 then Res= 5
else if floor(theNumber/10000) > 0 then Res= 4
else if floor(theNumber/1000) > 0 then Res= 3
else if floor(theNumber/100) > 0 then Res= 2
else if floor(theNumber/10) > 0 then Res= 1
else if floor(theNumber) > 0 then Res = 0;
_Digits = Res;