在MATLAB中将数字的最低有效位加1

时间:2016-02-08 20:13:11

标签: matlab

示例:6.321:我需要它为6.322。          5.14875:我需要它是5.14876。

我该怎么做?

3 个答案:

答案 0 :(得分:4)

如果将数字表示为浮点数或双精度浮点数,则此问题是一个灾难。

如果您可以将数字作为字符串读入(您提到使用输入命令获取数字),您可以这样做:

x = input('ENTER A NUMBER: ','s');
decimal_place = find(fliplr(x)=='.',1) - 1;

x_val = str2double(x);
if(~isempty(decimal_place))     
    y = x_val + 10 ^ -decimal_place;
else % if there is no decimal place, find first non-zero digit to get sigfig
    warning('ambiguous number of significant digits');
    first_nonzero_digit = find(fliplr(x)~='0',1);
    if(~isempty(first_nonzero_digit))
      y = x_val + 10 ^ (first_nonzero_digit - 1);
    else
      y = x_val + 1;
    end
end

disp('your new number is');
disp(y);

示例测试运行:

ENTER A NUMBER: 1.9
your new number is
     2
ENTER A NUMBER: 3510
your new number is
     3520
ENTER A NUMBER: 323.4374
your number is
  323.4375
ENTER A NUMBER: 0
your number is
     1

答案 1 :(得分:1)

答案 2 :(得分:-4)

假设您只是尝试进行常规舍入

我使用matlab内置的round函数。

让我们做上面的例子 ..
5.14875有5位小数,您希望它转换为5.14876。

让我们假设你的第6个小数位是9(所以你的数字是5.148759)

%Step 1:changethe format so that your going to be able to see all of the
%decimal places

format long 
%step2:now enter the original number
OriginalNumber=5.148755

%step 3 take the original number and round it to your new number
NewNumber=round(OriginalNumber,5)

如果第6个号码(你没有显示)是< 5因为计算机不知道要整理

,这个解决方案将无效

假设你只想减少数字......

您不能在常规默认的matlab浮点数中执行此操作。为了保持我的探索简单,我只会说明没有探索。我将在matlab网站上对matlab存储#(int vs floating point)的不同方法进行一些评论。他们有很好的文档。