| ■No86715 (MTK さん) に返信 >> // 600.0m は ToString() で "600.0" になるのでパースできない > こういうデータがくると計算できないんですね・・・
long.TryParse や decimal.TryParse の引数に NumberStyles パラメーターを加えることで、 許容させる文字列書式をある程度制御できます。
object money; //money = 1234.0m; // money.ToString() は「1234.0」、money.GetType().Name は「Decimal」 money = "1,234.0"; // money.ToString() は「1,234.0」、money.GetType().Name は「String」
// 変換できない Console.WriteLine(long.TryParse(money.ToString(), out long a));
// 変換できる Console.WriteLine(decimal.TryParse(money.ToString(), out decimal b)); Console.WriteLine(long.TryParse(money.ToString(), NumberStyles.Number, CultureInfo.InvariantCulture, out long c)); Console.WriteLine(decimal.TryParse(money.ToString(), NumberStyles.Any, CultureInfo.InvariantCulture, out decimal d));
long.TryParse に NumberStyles を渡さなかった場合は NumberStyles.Integer 相当、 decimal.TryParse に NumberStyles を渡さなかった場合は NumberStyles.Number 相当でパースされます。 |