16進の文字列をst​r2doubleで数​に変換時に1桁目に「​E」が混ざると処理で​きない

16進の文字列をstr2doubleで数値に変換しようとしているのですが、16進文字列の1桁目にEのアルファベットが入っていると、画像のように変換結果がNaNになってしまいます。
私の環境によるものでしょうか❓
原因が分からなくて、もし分かる方がいらっしゃいましたらご教示いただけますと幸いです。
どうぞよろしくお願いいたします。

1 件のコメント

mayu
mayu 2024 年 10 月 30 日
編集済み: mayu 2024 年 10 月 30 日
ちなみに、str2numだとエラーが出ないのですが、
AppDesignerで作成しているアプリのコールバック関数内に書くと、
「スカラー値の演算を行う場合は、パフォーマンスを高めるために STR2DOUBLE の使用を検討してください。」
というアナウンスが出ます。
str2numとstr2doubleの違いについてもよく分からなかったので、以下のページも見ていたのですが、一般的にはstr2doubleを使用するのでしょうか。

サインインしてコメントする。

 採用された回答

Akira Agata
Akira Agata 2024 年 10 月 30 日

1 投票

16進数の文字列を数値に変換するには、hex2dec をお使い下さい。
hex2dec('0x0E')
ans = 14

3 件のコメント

mayu
mayu 2024 年 10 月 30 日
編集済み: mayu 2024 年 10 月 30 日
早速ありがとうございます。
アプリ内の配列の変換処理でhex2decを使った際にうまくいかなかったので(実際別のところに原因があった…)別のものを試しながら迷走していました。
原因がわかったのでhex2decで処理できました💦ありがとうございました。
mayu
mayu 2024 年 10 月 30 日
編集済み: mayu 2024 年 10 月 30 日
■メモ:
str2doubleで変換時、1桁目がEの場合にエラーが出る(処理がNaNになる、「入力は有限にする必要があります」のアラートが出る)
 ➡ E表記として処理されるため❓に値・桁数が決まらずエラーとなったのかも❓
Akira Agata
Akira Agata 2024 年 11 月 1 日
@mayu
うまく処理できたとのことで安心しました。
ちなみに str2double でエラーとなったのは、E が関数内部で10のべき乗と解釈されるためです。
たとえば str2double("3.14E2") と入れて頂くと、314 ( = 3.14×10^2) が返ってきます。
このため、今回のように 0x0E を入れると、Eのうしろに数字がないため10を何乗にすれば良いかが分からず、NaNが返ってくることになります(以下の例をご参照ください)。
今回は str2double に入力したE以外の文字が幸い16進数として解釈されたようですが、この関数の仕様上A~F などの文字は正式には対応していないため、「たまたまうまくいった」と捉えて頂ければと思います(ぜひ hex2dec をご活用ください!👍)
str2double("3.14E")
ans = NaN
str2double("3.14E2")
ans = 314

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File Exchangeデータ型の変換 についてさらに検索

製品

リリース

R2021b

質問済み:

2024 年 10 月 30 日

コメント済み:

2024 年 11 月 1 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!