小数点表示をしたい(ただし、後0は付加しない)

任意の小数値Aに後0(小数点の末尾の0)が付かないように表示させたいと思っています。 下記のようにするとstr_g ='4.5036e+15'という形式で表示されてしまいました。 小数で且つ、後0(小数点の末尾の0)が付かないようにするにはどうすればよいでしょうか。
str_g = sprintf('%g',A);
Matlab2018aを使用しています。

2 Kommentare

Kazuya
Kazuya am 4 Nov. 2018
質問の意図が読み切れませんでしたが、、コマンドウィンドウでの出力表示を
>> A = 0.8
A =
0.8000
となるところを
0.8
とだけ表示させたいということですか?
yuuji yamada
yuuji yamada am 8 Nov. 2018
はい。 小数点A=0.8000 を A=8e-1 というような記法をさせない、且つ、A = 0.8 と表示させたいということです。

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Kazuya
Kazuya am 9 Nov. 2018

0 Stimmen

コマンドウィンドウ上での double 型数値の表示形式を考えると、
にある選択肢しか取れないので、0.8 という表示はできません。もうすでに試しているように sprintf であれば文字列に変換した上で 0.8 と表示できますが、これでは用途に合いませんか?
A = 0.8;
str_g = sprintf('%g',A)
str_g =
'0.8'

6 Kommentare

yuuji yamada
yuuji yamada am 9 Nov. 2018
sprintf('%g', A) とやった場合、確かに小数点A=0.800 が 0.8 と表記されるのですが小数値によっては4.5036e+15のような浮動小数点表記法に なることがあるようです。 感覚では小数点の桁数が大きいときにそのような表記法になってしまうような気がします。
Kazuya
Kazuya am 20 Nov. 2018
例えばどんな数値で浮動小数点表記になりますか?
yuuji yamada
yuuji yamada am 21 Nov. 2018
浮動小数点表記になる数値をデバッグモードでプログラム上の変数にマウスカーソルを当てて
確認したところ
-0.0001* 1.0e-12
というように既に浮動小数点表記になっていました。
これがsprintf('%g', A)で -6.97932e-17 というような表記になっていたと思われます。
どうもありがとうございました。
Kazuya
Kazuya am 22 Nov. 2018
ほんとですね。。小数点以下 0 は3つまでが境目のようですね・・
sprintf('%g', 1e-4)
ans =
'0.0001'
>> sprintf('%g', 1e-5)
ans =
'1e-05'
>> sprintf('%g', 0.1111e-4)
ans =
'1.111e-05'
Akira Agata
Akira Agata am 28 Nov. 2018
Bearbeitet: Akira Agata am 28 Nov. 2018
数値を有効数字n桁の文字列として出力した後、もし末尾に1個以上の 0 があれば除去して表示する、という方法ではどうでしょうか。
例えば、以下のようにすると、対象となる数値Aが 0 以上 1 以下の場合に、有効数字3桁の文字列として出力することができます。
A = pi*1e-4; % 数値の一例
n = -1*floor(log10(A))+2;
format = ['%.',num2str(n),'f'];
str = sprintf(format,A);
str = regexprep(str,'0+$','');
>> str
str =
'0.000314'
yuuji yamada
yuuji yamada am 29 Nov. 2018
御回答ありがとうございます。
ご提示いただいた方法でうまくいきそうです。
どうもありがとうございました。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

madhan ravi
madhan ravi am 31 Okt. 2018

1 Stimme

isfloat(4.5036e+15)
if it returns 1 , then its a decimal value

Kategorien

Community Treasure Hunt

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

Start Hunting!