String から int や double の変換時に例外にならない
OpenSiv3Duser 2019/10/01(Tue) 11:56
https://siv3d.github.io/ja-jp/tutorial/formatting/#parseerror
例外処理で、変換エラーを検知できることが分かりました。
// ソースコードの一部抜粋
String n0 = U"123.12";
String err0 = U"12.123.12";
String err1 = U"abcd";
double foo=-999;
try
{
foo = ParseFloat<double>(err1);
}
catch (const ParseError & e)
{
// 例外の詳細を取得して表示
Print << e.what();
}
while (System::Update())
{}
ブレークポイントでも調べましたが、例外で飛んでいないようです。
値は0が入りますが、0は設定もされる可能性もあるので、
変換成功か失敗かを検知する方法は無いでしょうか?
もしくは、C#の TryParse みたいな感じで簡単に確認できるようなものは無いでしょうか?
Reputeless 2019/10/01(Tue) 13:59
ご報告ありがとうございます。
浮動小数点数型の変換失敗時に例外が飛ばない実装漏れがありました。
近日中にリリースされる OpenSiv3D v0.4.1 で修正しました。
https://github.com/Siv3D/OpenSiv3D/issues/375
OpenSiv3Duser 2019/10/01(Tue) 15:15
Reputeless 2019/10/03(Thu) 09:40
Parse<int32>
Parse<double>
を使ってください。
ParseInt や ParesFloat は Parse の内部で使われる関数です。
https://siv3d.github.io/ja-jp/tutorial/formatting/#73