MATLAB 任意位数小数控制
(2011-08-31 16:31:28)
标签:
matlab任意小数位小数位控制任意小数位输出控制数据 |
分类: matlab |
MATLAB 任意位数小数控制
今天收到一个求助,说是要控制小数至任意小数位,并要将结果转成字符型。个人知道,matlab的小数位控制较为单一,基本上靠format来完成。但matlab中,仅有默认的format,也就是format short 是小数点后4位,以及format long是小数点后15位。但如果要求的是的两位小数,或者6位,8位,那该如何解决?上网搜索了一番,发现该问题有不少人碰到,遗憾的是,没有令人很满意的答案。个人将现有方法整理了一下,加上个人理解,写了几个转换的方法,整理如下。
方法1:digits+vpa
该方法是用digits()设定运算精度,然后用vpa获得所要的小数位数。该方法可以达到获取需要的任意位小数,但弊端很多,其1,运算精度里包含了整数部分,所以需要提取整数部分和分数部分,并计算整数部分的位数,以下程序中求len就是整数位数。其2,获得的结果是符号型,符号型的运算速度要比数值慢上很多。
format long
a = input('please give a number which will be changed£º');
n = input('how many decimal digits will you keep: ');
num = floor(a);
str = num2str(num);
len = length(str);
err = a-num;
digits(n+len); % 此处为需要的小数位 + 整数位数
need_num = num+vpa(err,n+len);
need_str = num2str(double(need_num))
运行结果:
please give a number which will be changed:3.1415926
how many decimal digits will you keep: 2
need_str =
3.14
方法2:round 函数法
format long
a = input('please give a number which will be changed:');
n = input('how many decimal digits will you keep: ');
b = a*10^n;
aa = round(b);
need_num =
aa/10^n;
need_str = num2str(need_num)
运行结果:
please give a number which will be changed:pi
how many decimal digits will you keep: 2
need_str =
3.14
方法3:直接转成字符串,再取需要位数
format long
a = input('please give a number which will be changed:');
n = input('how many decimal digits will you keep: ');
num = floor(a);
str = num2str(num);
len = length(str);
str1 = num2str(a);
need_str =
str1(1:(len+n+1))
运行结果:
please give a number which will be
changed:pi
how many decimal digits will you keep: 2
need_str =
3.14
方法4:fprintf方法
a = input('please give a
number which will be changed:');
n = input('how many decimal digits will you keep: ');
fprintf('a = %3.2f\n',a)
运行结果:
please give a number which will be changed:pi
how many decimal digits will you keep: 2
a = 3.14