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

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

1 commentaire

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

Connectez-vous pour commenter.

 Réponse acceptée

Akira Agata
Akira Agata le 30 Oct 2024

1 vote

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

3 commentaires

mayu
mayu le 30 Oct 2024
Modifié(e) : mayu le 30 Oct 2024
早速ありがとうございます。
アプリ内の配列の変換処理でhex2decを使った際にうまくいかなかったので(実際別のところに原因があった…)別のものを試しながら迷走していました。
原因がわかったのでhex2decで処理できました💦ありがとうございました。
mayu
mayu le 30 Oct 2024
Modifié(e) : mayu le 30 Oct 2024
■メモ:
str2doubleで変換時、1桁目がEの場合にエラーが出る(処理がNaNになる、「入力は有限にする必要があります」のアラートが出る)
 ➡ E表記として処理されるため❓に値・桁数が決まらずエラーとなったのかも❓
@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

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur データ型の変換 dans Centre d'aide et File Exchange

Produits

Version

R2021b

Community Treasure Hunt

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

Start Hunting!