MATLAB--Basics - Rounding

例1

Problem 42641. MATLAB Basic: rounding

Do rounding near to zero

Example: -8.8, answer -8

+8.1 answer 8

"rounding" 意思是四舍五入。在数学和计算中,当你需要将一个数字近似到最接近的整数或某个特定的小数位数时,你会使用四舍五入来完成这个过程。 

  • 在 MATLAB 中,你可以使用 round 函数来进行四舍五入。这个函数将输入的数字四舍五入到最接近的整数。例如:

    x = 4.6;
    rounded_x = round(x);
    disp(rounded_x); % 输出 5

round 函数还可以接受第二个参数,该参数指定要舍入到的小数位数。

  • 在 MATLAB 中,你可以使用 fix 函数来向零舍入。这个函数将返回不大于输入值的最大整数(即向零方向取整)。

代码实现:

x1 = -8.8;
rounded_x1 = fix(x1);
disp(rounded_x1); % 输出 -8

x2 = 8.1;
rounded_x2 = fix(x2);
disp(rounded_x2); % 输出 8

例2.

Problem 42642. MATLAB Basic: rounding II

Do rounding nearest integer.

Example: -8.8, answer -9

+8.1 answer 8

+8.50 answer 9

>> x=-8.8;y=round(x);y%输出y=-9
>> x=8.1;y=round(x);y%输出y=8
>> x=8.5;y=round(x);y%输出y=9

例3.

Problem 42643. MATLAB Basic: rounding III

Do rounding towards minus infinity.

Example: -8.8, answer -9

+8.1 answer 8

+8.50 answer 8

在 MATLAB 中,你可以使用 floor 函数来向负无穷大方向取整。这个函数将返回不大于输入值的最大整数(即向负无穷大方向取整)。

x = -8.8;
rounded_x = floor(x);
disp(rounded_x); % 输出 -9

这段代码使用 floor 函数将输入值向负无穷大方向取整,得到最接近且不大于输入值的整数。 

例4.

Problem 42644. MATLAB Basic: rounding IV

Do rounding towards plus infinity.

Example: -8.8, answer -8

+8.1 answer 9

+8.50 answer 9

在 MATLAB 中,你可以使用 ceil 函数来向正无穷大方向取整。这个函数将返回不小于输入值的最小整数(即向正无穷大方向取整)。

x1 = -8.8;
rounded_x1 = ceil(x1);
disp(rounded_x1); % 输出 -8

x2 = 8.1;
rounded_x2 = ceil(x2);
disp(rounded_x2); % 输出 9

x3 = 8.50;
rounded_x3 = ceil(x3);
disp(rounded_x3); % 输出 9

这段代码使用 ceil 函数将输入值向正无穷大方向取整,得到最接近且不小于输入值的整数。 

例5.

Problem 2559. Check that number is whole number

Check that number is whole number Say x=15, then answer is 1. x=15.2 , then answer is 0. http://en.wikipedia.org/wiki/Whole_number

 在 MATLAB 中,你可以使用 mod 函数来检查一个数字是否为整数。如果一个数字是整数,那么它除以 1 的余数应该为 0

function isWhole = checkWholeNumber(x)
    isWhole = (mod(x, 1) == 0);
end

你可以调用这个函数并传入要检查的数字,它将返回一个逻辑值,指示该数字是否为整数。例如:

x = 5;
result = checkWholeNumber(x);
disp(result); % 输出 1(表示真,即 x 是整数)

y = 5.5;
result = checkWholeNumber(y);
disp(result); % 输出 0(表示假,即 y 不是整数)

这个程序检查输入值除以 1 的余数是否为 0,如果是,则返回真,否则返回假。

例6.

Problem 2866. Matlab Basics - Rounding II

Write a script to round a variable x to 3 decimal places:

e.g. x = 2.3456 --> y = 2.346

代码实现: 

% 在 MATLAB 中,你可以使用 round 函数来将一个变量 x 四舍五入到 3 位小数。
% 以下是相应的 MATLAB 脚本:

x = 3.14159; % 这是你要舍入的变量

rounded_x = round(x, 3); % 使用 round 函数将 x 四舍五入到 3 位小数
disp(rounded_x); % 输出舍入后的结果
%输出结果:3.1420
% MATLAB 脚本:将变量 x 四舍五入到 3 位小数

x = 2.3456; % 你要舍入的变量

y = round(x, 3); % 使用 round 函数将 x 四舍五入到 3 位小数
disp(y); % 输出舍入后的结果
%输出2.340

例7

Problem 2867. Matlab Basics - Rounding III

Write a script to round a large number to the nearest 10,000

e.g. x = 12,358,466,243 --> y = 12,358,470,000

% MATLAB 脚本:将一个大数四舍五入到最近的 10,000

x = 12358466243; % 要舍入的大数

y = round(x, -4); % 使用 round 函数将 x 四舍五入到最近的 10,000
disp(y); % 输出舍入后的结果

这段代码将大数 x 四舍五入到最近的 10,000,并输出结果。

例8.

Problem 2120. Rounding off numbers to n decimals

Inspired by a mistake in one of the problems I created, I created this problem where you have to round off a floating point number to n decimals. There are 2 inputs to the function: x: floating point number and n: number of decimals which need to match with the given solutions.

(受我创建的一个问题中的一个错误的启发,我创建了这个问题,你需要将一个浮点数四舍五入到 n 位小数。函数有两个输入:x:浮点数,n:需要与给定解决方案匹配的小数位数。) 

你需要编写一个函数,将一个浮点数四舍五入到指定的小数位数。这个函数接受两个输入:浮点数 x 和要四舍五入到的小数位数 n。可以使用 MATLAB 的 round 函数来实现这个功能。你可以像这样定义这个函数:

function rounded_num = roundToNDecimals(x, n)
    % 将浮点数 x 四舍五入到 n 位小数
    rounded_num = round(x * 10^n) / 10^n;
end

这个函数将浮点数 x 乘以 10 的 n 次方,然后将结果四舍五入,最后再除以 10 的 n 次方,以得到四舍五入到 n 位小数的结果。你可以像这样调用这个函数:

x = 2.3456; % 浮点数
n = 3; % 要四舍五入到的小数位数
rounded_num = roundToNDecimals(x, n);
disp(rounded_num); % 输出四舍五入后的结果

这段代码将会输出 2.346,即将浮点数 2.3456 四舍五入到 3 位小数。

例9.

Problem 43278. Make roundn function

Make roundn function using round.

x=0.55555
y=function(x,1)
y=1
y=function(x,2)
y=0.6
y=function(x,3)
y=0.56
function rounded_num = roundn(x, n)
    % 将 x 四舍五入到最接近的 n 位小数
    factor = 10^n; % 计算乘以的因子
    rounded_num = round(x * factor) / factor; % 将 x 乘以因子后四舍五入,再除以因子得到结果
end

这个函数接受一个数字 x 和要四舍五入到的小数位数 n。它将 x 乘以 10 的 n 次方以将小数点移动到所需位置,使用 round 函数将结果四舍五入到最接近的整数,然后再除以 10 的 n 次方以将小数点移回。

x = 0.55555;
y = roundn(x, 1); % Round to 1 decimal place
disp(y); % Output: 0.6

y = roundn(x, 2); % Round to 2 decimal places
disp(y); % Output: 0.56

y = roundn(x, 3); % Round to 3 decimal places
disp(y); % Output: 0.556

例10.

Problem 713. Find the maximum number of decimal places in a set of numbers

Given a vector or matrix of values, calculate the maximum number of decimal places within the input. Trailing zeros do not count as significant. No significant digits will result in an answer of 0.

For example:

x = [0.01 0.888 1.0 40.151 39.1244];

y = 4;

The maximum number of significant decimal places from the input is 4 (39.1244).

(给定一个数值向量或矩阵,计算输入中最大的小数位数。末尾的零不算作有效数字。如果没有有效数字,则答案为 0。 例如: x = [0.01 0.888 1.0 40.151 39.1244]; y = 4; 从输入中提取的有效小数位数最大值为 4(39.1244)。) 

function max_decimal_places = calculateMaxDecimalPlaces(input)
    % 计算输入中的最大小数位数
    % input: 输入的数值向量或矩阵
    
    % 将输入转换为一维向量
    input_vector = input(:);
    
    % 初始化最大小数位数为 0
    max_decimal_places = 0;
    
    % 遍历每个元素
    for i = 1:numel(input_vector)
        % 将元素转换为字符串
        str = sprintf('%.20f', input_vector(i)); % 保留足够的精度以捕获所有小数位
        
        % 使用正则表达式找到小数部分
        decimal_part = regexp(str, '\.(\d*?)(0*)$', 'tokens', 'once');
        
        % 如果找到小数部分
        if ~isempty(decimal_part)
            % 计算小数位数(末尾的零不算作有效数字)
            decimal_places = numel(decimal_part{1}) - numel(decimal_part{2});
            
            % 更新最大小数位数
            max_decimal_places = max(max_decimal_places, decimal_places);
        end
    end
end

你可以像这样调用这个函数:

x = [0.01 0.888 1.0 40.151 39.1244];
max_decimal_places = calculateMaxDecimalPlaces(x);
disp(['从输入中提取的有效小数位数最大值为 ' num2str(max_decimal_places)]);

 这段代码将输出:

从输入中提取的有效小数位数最大值为 4

 即对于给定的输入向量 x,最大的有效小数位数为 4(对应于数字 39.1244)。

  • 34
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值