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

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

Iniciar sesión para comentar.

Respuesta aceptada

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

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre ビッグ データの処理 en Help Center y File Exchange.

Productos


Versión

R2021b

Community Treasure Hunt

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

Start Hunting!