フィルターのクリア

how to get only 3 digit under point

59 ビュー (過去 30 日間)
octopus_love
octopus_love 2017 年 9 月 11 日
コメント済み: Walter Roberson 2017 年 9 月 11 日
Hello,
I want to get the only 3 digit under the point. For example,
a = 123.4567;
and I want to get just modify_a = 123.456. I tried the code
a = round(a*10^3)/10^3
but the result is , a = 123.457 0;
How can I remove the '0' point? please help me.
Thank you in advance.
  2 件のコメント
octopus_love
octopus_love 2017 年 9 月 11 日
Thank you everyone. This was intended to display a specific value on GUI.
I applied the
a = 123.4567
var_a = round(a, 3);
and tried to
msgbox(num2str(var_a))
and it was displayed the '123.456'. I overlooked about the data type.
Thank you.
Walter Roberson
Walter Roberson 2017 年 9 月 11 日
msgbox( sprintf('%.3f', var_a) )
provided that rounding is acceptable.
Note: round(a,3) does rounding, not truncation. 123.4567 would round to 123.457

サインインしてコメントする。

採用された回答

Image Analyst
Image Analyst 2017 年 9 月 11 日
編集済み: Image Analyst 2017 年 9 月 11 日
Use round() and pass in the number of digits as the second input:
a3 = round(a, 3)
Keep in mind that it's still a 64 bit number but it will be rounded and all of the umpteen digits after the third decimal place will be 0. They will still be there (you can't get rid of them), but they will be zero. You can then print out that number with fprintf() or sprintf() with 1,2,3,4,5 or however many decimal places you want, and you will see however many you told it to print, just keep in mind that any digits after 3 will be 0.
fprintf('%.3f', a); % Shows n.nnn
fprintf('%.6f', a); % Shows n.nnn000
fprintf('%.1f', a); % Shows n.n
  1 件のコメント
Walter Roberson
Walter Roberson 2017 年 9 月 11 日
... well, except for the fact that the fraction 0.456 is not exactly representable in IEEE 754 Double Precision. The closest representable number is 123.4560000000000030695446184836328029632568359375

サインインしてコメントする。

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2017 年 9 月 11 日
In order to do that you will need to override the important internal routine toolbox/matlab/lang/@double/display to implement an additional "format" that has exactly three decimal places and which truncates. I would expect that would be a notable amount of work to get right without interfering with any of the current uses of the routine.
The built in "format" can display 2 digits after the decimal place ("format bank" or sometimes "format short g") or 4 digits after the decimal place ("format short" or "format short eng"), or 15 digits after the decimal place ("format long"), or up to 15 digits after the decimal place, stopping the remaining digits of the 15 are all 0. The "format" routines all round.
For any other format like 3 digits exactly with truncation, you need to override the display method. Or you could do the display formatting yourself, using sprintf() or fprintf()

カテゴリ

Help Center および File Exchange선 플롯 についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!