javaでは数値リテラルの扱いに注意が必要になることがあります。
C#の仕様も気になったので、一覧にまとめてみました。
javaとの違いは以下の通りです。
・整数型に符号無し(u)、実数型にdecimal型(m)も指定できる
※decimal型は丸め誤差が発生しない実数型、javaで言うBigDecimal
・整数型の場合、精度や符号有無を自動判定する
なお、以下のように、接尾辞・小数点無しの数値同士の計算結果を実数型の変数に格納する場合に、整数型として計算されてしまい小数点以下で切り捨てられてしまうのはjavaと同じなので、注意が必要です。
【サンプルコード】
・Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LiteralTest
{
class Program
{
static void Main(string[] args)
{
// 右辺の計算結果は整数型として扱われる
double doubleValue1 = 1 / 2;
Console.WriteLine("[1 / 2]");
Console.WriteLine(doubleValue1);
// 右辺の計算結果は実数型(double)として扱われる
double doubleValue2 = 1.0 / 2.0;
Console.WriteLine("[1.0 / 2.0]");
Console.WriteLine(doubleValue2);
// 右辺の計算結果は実数型(double)として扱われる
double doubleValue3 = 1d / 2d;
Console.WriteLine("[1d / 2d]");
Console.WriteLine(doubleValue3);
Console.ReadKey(true);
}
}
}
【実行結果】
[1 / 2]
0
[1.0 / 2.0]
0.5
[1d / 2d]
0.5