NSSetIntValueの仕様確認

nsluaのNSSetIntValueは、NScripter側の数値変数の値を設定する関数である。
設定するのに与える数値は、luaのnumber型に限られる訳で、すなわち32bitの浮動小数点である。(確か)
しかし、NScripter側は整数オンリーな訳で、非整数を放り込んだ時にどういう動作をするかをそういや確かめてなかったなと思いだしたので確かめてみた。

system.lua

-- system.lua
local fh = io.open("numbers.csv", "w")
for i=-10, 10, 0.1 do
	if i>-10 then fh:write("\n") end
	fh:write(tostring(i))
	fh:write(",")
	NSSetIntValue(0, i)
	fh:write(tostring(NSGetIntValue(0)))
end
fh:close()

numbers.csv

-10,-10
-9.9,-10
-9.8,-10
-9.7,-10
-9.6,-10
-9.5,-9
-9.4,-9
-9.3,-9
-9.2,-9
-9.1,-9
-9,-9
-8.9,-9
-8.8,-9
-8.7,-9
-8.6,-9
-8.5,-8
-8.4,-8
-8.3,-8
-8.2,-8
-8.1,-8
-8,-8
-7.9,-8
-7.8,-8
-7.7,-8
-7.6,-8
-7.5,-7
-7.4,-7
-7.3,-7
-7.2,-7
-7.1,-7
-7,-7
-6.9,-7
-6.8,-7
-6.7,-7
-6.6,-7
-6.5,-6
-6.4,-6
-6.3,-6
-6.2,-6
-6.1,-6
-6,-6
-5.9,-6
-5.8,-6
-5.7,-6
-5.6,-6
-5.5,-5
-5.4,-5
-5.3,-5
-5.2,-5
-5.1,-5
-5,-5
-4.9,-5
-4.8,-5
-4.7,-5
-4.6,-5
-4.5,-4
-4.4,-4
-4.3,-4
-4.2,-4
-4.1,-4
-4,-4
-3.9,-4
-3.8,-4
-3.7,-4
-3.6,-4
-3.5,-3
-3.4,-3
-3.3,-3
-3.2,-3
-3.1,-3
-3,-3
-2.9,-3
-2.8,-3
-2.7,-3
-2.6,-3
-2.5,-2
-2.4,-2
-2.3,-2
-2.2,-2
-2.1,-2
-2,-2
-1.9,-2
-1.8,-2
-1.7,-2
-1.6,-2
-1.5,-1
-1.4,-1
-1.3,-1
-1.2,-1
-1.1,-1
-0.99999999999998,-1
-0.89999999999998,-1
-0.79999999999998,-1
-0.69999999999998,-1
-0.59999999999998,-1
-0.49999999999998,0
-0.39999999999998,0
-0.29999999999998,0
-0.19999999999998,0
-0.099999999999985,0
1.5293322164212e-014,0
0.10000000000002,0
0.20000000000002,0
0.30000000000002,0
0.40000000000002,0
0.50000000000002,1
0.60000000000002,1
0.70000000000002,1
0.80000000000002,1
0.90000000000002,1
1,1
1.1,1
1.2,1
1.3,1
1.4,1
1.5,2
1.6,2
1.7,2
1.8,2
1.9,2
2,2
2.1,2
2.2,2
2.3,2
2.4,2
2.5,3
2.6,3
2.7,3
2.8,3
2.9,3
3,3
3.1,3
3.2,3
3.3,3
3.4,3
3.5,4
3.6,4
3.7,4
3.8,4
3.9,4
4,4
4.1,4
4.2,4
4.3,4
4.4,4
4.5,5
4.6,5
4.7,5
4.8,5
4.9,5
5,5
5.1,5
5.2,5
5.3,5
5.4,5
5.5,6
5.6,6
5.7,6
5.8,6
5.9,6
6,6
6.1,6
6.2,6
6.3,6
6.4,6
6.5,7
6.6,7
6.7,7
6.8,7
6.9,7
7,7
7.1,7
7.2,7
7.3,7
7.4,7
7.5,8
7.6,8
7.7,8
7.8,8
7.9,8
8,8
8.1,8
8.2,8
8.3,8
8.4,8
8.5,9
8.6,9
8.7,9
8.8,9
8.9,9
9,9
9.1,9
9.2,9
9.3,9
9.4,9
9.5,9
9.6,10
9.7,10
9.8,10
9.9,10
10,10

感想

……えっ。floorとかintじゃないんだ。
しかも単純に四捨五入と言うわけでもない。ありゃー。手抜きはいかんなあ。
数値を渡す時、整数にならないのであれば、自分でmath.floorとかできっちり変換してから渡すべきだなあ。