2013-07-02 59 views

回答

3

這是真正的數字格式:

writeln(foo:N:M); 

打印的foo值在N場寬度和顯示M小數。因此,在C你會使用:

printf("%N.Mf\n", foo); 

如果N是是太小,無法容納格式化值(給出的M大小),它會用它需要打印數量的空間。

在Pascal中,您可能有N和/或M爲變量。在這種情況下,在C,你可以創建如下格式的字符串:

char my_fmt[50]; // could pick a "smarter" length for the string; this is just for example 

sprintf(my_fmt, "%%%d.%df\n", N, M); 
printf(my_fmt, foo); 

或者更簡單:

printf("%*.*f\n", N, M, foo); 
+0

在帕斯卡,n和m可能是變量。因此,儘管示例中的簡單情況可能相同,但可能需要構造格式化字符串。 –

+0

你不需要'的sprintf()'來生成格式字符串( 「%* * F \ N」,N,M,富)'printf的;'是如此簡單得多,你不覺得嗎? –

+0

@ElchononEdelson是的,這是簡單的,我有,在我的腦海裏。自從我需要或使用它已經很長時間了,我不確定它。我已經將它添加到完整性的答案中。 – lurker

0

它將打印改編右對齊到的最小的總寬度[I] 0,十進制分隔符後的精度爲14位(舊的skool pascal情況下的一個點)。

請注意,總寬度爲0基本上會禁用對齊,但它必須能夠指定小數點分隔符精度。

雙格式化參數意味着ARR [I]必須是一個浮子式。 (或定點貨幣類型,在Delphi中)

將數組下標從Pascal轉換爲C時要小心.Pascal數組可能有一個非零下限,然後您必須相應地轉換數組。

var xx : array [m..n] of double 

變得

double xx[n-m+1]; 

與通過減去米糾正了所有陣列索引。像

arr[x-m])