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

52 Ansichten (letzte 30 Tage)
mayu
mayu am 30 Okt. 2024 um 1:56
Kommentiert: Akira Agata am 1 Nov. 2024 um 3:00
16進の文字列をstr2doubleで数値に変換しようとしているのですが、16進文字列の1桁目にEのアルファベットが入っていると、画像のように変換結果がNaNになってしまいます。
私の環境によるものでしょうか❓
原因が分からなくて、もし分かる方がいらっしゃいましたらご教示いただけますと幸いです。
どうぞよろしくお願いいたします。
  1 Kommentar
mayu
mayu am 30 Okt. 2024 um 2:17
Bearbeitet: mayu am 30 Okt. 2024 um 2:29
ちなみに、str2numだとエラーが出ないのですが、
AppDesignerで作成しているアプリのコールバック関数内に書くと、
「スカラー値の演算を行う場合は、パフォーマンスを高めるために STR2DOUBLE の使用を検討してください。」
というアナウンスが出ます。
str2numとstr2doubleの違いについてもよく分からなかったので、以下のページも見ていたのですが、一般的にはstr2doubleを使用するのでしょうか。

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Akira Agata
Akira Agata am 30 Okt. 2024 um 3:29
16進数の文字列を数値に変換するには、hex2dec をお使い下さい。
hex2dec('0x0E')
ans = 14
  3 Kommentare
mayu
mayu am 30 Okt. 2024 um 7:09
Bearbeitet: mayu am 30 Okt. 2024 um 7:10
■メモ:
str2doubleで変換時、1桁目がEの場合にエラーが出る(処理がNaNになる、「入力は有限にする必要があります」のアラートが出る)
 ➡ E表記として処理されるため❓に値・桁数が決まらずエラーとなったのかも❓
Akira Agata
Akira Agata am 1 Nov. 2024 um 3:00
@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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu ビッグ データの処理 finden Sie in Help Center und File Exchange

Produkte


Version

R2021b

Community Treasure Hunt

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

Start Hunting!