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

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

2 Comments

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

Sign in to comment.

 Accepted Answer

Kazuya
Kazuya on 9 Nov 2018

0 votes

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

6 Comments

yuuji yamada
yuuji yamada on 9 Nov 2018
sprintf('%g', A) とやった場合、確かに小数点A=0.800 が 0.8 と表記されるのですが小数値によっては4.5036e+15のような浮動小数点表記法に なることがあるようです。 感覚では小数点の桁数が大きいときにそのような表記法になってしまうような気がします。
Kazuya
Kazuya on 20 Nov 2018
例えばどんな数値で浮動小数点表記になりますか?
yuuji yamada
yuuji yamada on 21 Nov 2018
浮動小数点表記になる数値をデバッグモードでプログラム上の変数にマウスカーソルを当てて
確認したところ
-0.0001* 1.0e-12
というように既に浮動小数点表記になっていました。
これがsprintf('%g', A)で -6.97932e-17 というような表記になっていたと思われます。
どうもありがとうございました。
Kazuya
Kazuya on 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 on 28 Nov 2018
Edited: Akira Agata on 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 on 29 Nov 2018
御回答ありがとうございます。
ご提示いただいた方法でうまくいきそうです。
どうもありがとうございました。

Sign in to comment.

More Answers (1)

madhan ravi
madhan ravi on 31 Oct 2018

1 vote

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

Categories

Asked:

on 31 Oct 2018

Commented:

on 29 Nov 2018

Community Treasure Hunt

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

Start Hunting!