MATLAB 任意位数小数控制
2014-04-15 08:57
381 查看
from: http://blog.sina.com.cn/s/blog_6aaea1760100t7ch.html
今天收到一个求助,说是要控制小数至任意小数位,并要将结果转成字符型。个人知道,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)) %%%取需要的长度,这里需要加上整数长和小数点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) %%%%3.2f中.2就是小数位数
运行结果:
please
give a number which will be changed:pi
how many decimal digits will you keep: 2
a = 3.14
以上便是本人所总结的控制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)) %%%取需要的长度,这里需要加上整数长和小数点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) %%%%3.2f中.2就是小数位数
运行结果:
please
give a number which will be changed:pi
how many decimal digits will you keep: 2
a = 3.14
以上便是本人所总结的控制matlab小数至任意位数,并转换为字符串的各方法,不足之处众多,有待将来补充。
相关文章推荐
- C语言小数四舍五入输出可控制位数
- actionscript 中 如何控制数字精度(小数位数)
- JAVA中double格式化控制精度小数位数,float同理
- 如何控制matlab中的数据输出格式? 改变输出位数精度
- MATLAB中控制输出格式中小数点后的位数
- Java四舍五入保留任意位数小数
- java中保留任意位数的小数/java中四舍五入/获得任意位数的方法
- python中将浮点数变成json时,控制小数位数
- java 控制输出小数位数
- 在JSP中使用formatNumber控制要显示的小数位数方法
- 在c++中如何控制小数位数
- 【matlab】 关于保留小数位数&有效数字的问题
- 只控制input框只能输入数字,并控制小数位数
- Java BigDecimal 解决两个double相加控制小数位数的东东
- 控制小数显示的位数
- 控制数据库两个小数相除后的小数位数
- C++输出控制--小数位数的两种方法
- ALV小数位数控制
- 关于Java控制小数位数的问题
- actionscript 中 如何控制数字精度(小数位数)