Unityな日々(Unity Geek)

Unityで可視化アプリを開発するための試行錯誤の覚書

Unity-C#で数値を扱うクラス

Unity-C#で数値を扱う場合、あまり考えることなく整数だとint、浮動小数点だとfloatをつい使ってしまうが、扱える範囲やサイズに応じていくつかの変数型がある。メモリサイズや速度をギリギリとつめたいときや、逆に大きな数値を扱う場合は、型の最適化を忘れないようにしよう。

整数型

範囲
sbyte型 符号付8bit整数(-128~127)
byte型 符号なし8bit整数(0~255)
short型 符号付16bit整数(-32768~32767)
ushort型 符号なし16bit整数(0~65535)
int型 符号付32bit整数(-2147483648~2147483647)
uint型 符号なし32bit整数(0~4294967295)
long型 符号付64bit整数(-9223372036854775808~9223372036854775807)
ulong型 符号なし64bit整数(0~18446744073709551615)

浮動小数点型

サイズ 表記例
float 符号付32bit浮動小数点数 1.3f
double 符号付64bit浮動小数点数 1.3d
decimal 符号付128bit浮動小数点数 1.3m

2017/5/20追記

数値の暗黙の型

整数の暗黙の型はInt32、非整数の暗黙の型はDouble である。

var defaultInt = 3;    //整数値で型を指定しない場合
Debug.Log(defaultInt.GetType()); //'System.Int32'になる

var defaultNum = 1.0;    //非整数値で型を指定しない場合
Debug.Log(defaultNum.GetType()); //'System.Double'になる

Decimal型

Float/Doubleが数値を2進数として保持するのに対し、Decimal型は数値を10進数として保持する。このため、いわゆる「桁落ち」が生じない(生じにくい)。

一方で、Decimal型の必要バイト数は大きく、数値ひとつで16バイトを消費するにもかかわらず、扱える数の範囲は4バイトのfloatより狭い。

参考:

ufcpp.net