示例:6.321:我需要它为6.322。 5.14875:我需要它是5.14876。
我该怎么做?
答案 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)的不同方法进行一些评论。他们有很好的文档。