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
対応ありがとうございます。


ところで、

ParseInt<int>

というように、Int と intが重複したりありますが、上記の <int> を外してすっきりさせていただくことは可能でしょうか?

あと、double の変換なのが ParseFloat とあります。この辺も混乱するので、記述を double に統一していただけないでしょうか?
編集
Reputeless  2019/10/03(Thu) 09:40
Parse<int32>
Parse<double>
を使ってください。

ParseInt や ParesFloat は Parse の内部で使われる関数です。

https://siv3d.github.io/ja-jp/tutorial/formatting/#73
編集
OpenSiv3Duser  2019/10/03(Thu) 14:38

なんと!知りませんでした。

よく見たら書いてありました。見落としておりました。ありがとうございます。


こちらの方がすっきりしていて分かりやすいので使わせていただきます。
編集
件名
Re: String から int や double の変換時に例外にならない
名前
コメント
画像添付


投稿修正キー (投稿を修正する時に使います)
画像認証 (右画像の数字を入力) 投稿キー

- WEB PATIO -