我在FSI和VS2010都试过这个。它们给出了相同的输出。
for i= 8 to 10 do
for j=7 to 10 do
let product=i*j
printfn "%d * %o = %x" i j product
,输出为:
8*7=38
8*10=40
8*11=48
8*12=50
9*7=3f
9*10=48
9*11=51
9*12=5a
10*7=46
10*10=50
10*11=5a
10*12=64
val it : unit = ()
我在这里错过了什么吗?
我尝试使用在线教程学习编程(使用F#因为我喜欢它)。
答案 0 :(得分:12)
输出对我来说似乎是正确的,因为您将i
,j
和product
的输出格式化为十进制(%d
),八进制({{1} })和hex(%o
),分别为。
数字7,8,9和10被格式化为7,10,11和12,因为这是它们的八进制表示。将它们全部更改为%x
或%d
以解决问题。
答案 1 :(得分:5)
猜猜它是关于printfn
的格式化字符串。试试%i
。
for i = 8 to 10 do
for j = 7 to 10 do
let product=i*j
printfn "%i * %i = %i" i j product
答案 2 :(得分:5)
是。你错过了什么。 10(十进制)* 10(八进制)= 50(十六进制)。 %d表示十进制,%o表示八进制,%x表示十六进制。如果你不知道它们是什么,请谷歌。
以下是完全相同的陈述。
十进制:
10 * 8 = 80。
八进制:
12 * 10 = 120
in hex:
a * 8 = 50。
在复制之前请仔细查看。
答案 3 :(得分:0)
请注意,printf格式说明符的文档在这里
http://msdn.microsoft.com/en-us/library/ee370560(VS.100).aspx
(虽然截至今天,文档格式有些混乱,难以阅读)