32 / 31 / 1
Регистрация: 04.07.2013
Сообщений: 232
Записей в блоге: 1
1

Округление чисел

28.09.2013, 14:20. Показов 34418. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Допустим,имеется число с тремя знаками после запятой,а достаточно точности,если после запятой имеем два значения,то есть число необходимо округлить. Как это можно сделать в Матлабе?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2013, 14:20
Ответы с готовыми решениями:

Округление чисел
Такой вопрос, скажите можно ли округлить след. числа: -0.2747;-0.1747;-0.0748;0.0252;0.1252 Мне...

Округление до заданных чисел
Здравствуйте. Можете подсказать как в матлабе сделать округление до заданных мною чисел? Например,...

Как убрать округление чисел
Здравствуйте, подскажите пожалуйста, как убрать округление чисел? В работе используются например...

Как отключить округление чисел на графике
Здравствуйте, когда строю график на осях округленные числа, типа 1.4454 *10^15, как можно от этого...

12
617 / 242 / 16
Регистрация: 31.07.2013
Сообщений: 376
28.09.2013, 16:44 2
Цитата Сообщение от de-pre Посмотреть сообщение
Допустим,имеется число с тремя знаками после запятой,а достаточно точности,если после запятой имеем два значения,то есть число необходимо округлить.
А для чего это может понадобиться? Может быть, нужно не округлить число, а напечатать его?

Тогда так:
Matlab M
1
2
3
4
5
>> pi
ans =
    3.1416
>> fprintf('%.2f\n', pi)
3.14
или сохранить в строковую переменную:
Matlab M
1
2
3
>> Pi = sprintf('%.2f', pi)
Pi =
3.14
которую потом можно преобразовать обратно в число (только зачем?):
Matlab M
1
2
3
>> Pi = str2double(Pi)
Pi =
    3.1400
Если же именно округлить с потерей точности, то, например, так:
Matlab M
1
2
3
>> Pi = round(pi*100)/100
Pi =
    3.1400
0
30 / 30 / 1
Регистрация: 14.04.2013
Сообщений: 68
28.09.2013, 16:45 3
Я бы использовал такой финт ушами:
Matlab M
1
2
x=0.125; %Есть число которое нужно округлить до второго знака после запятой
x=round(x*100)/100
Используем функцию округления до ближайшего целого, а перед этим умножаем наше число на 100 (т.к. до второго знака после запятой)
1
32 / 31 / 1
Регистрация: 04.07.2013
Сообщений: 232
Записей в блоге: 1
28.09.2013, 19:11  [ТС] 4
Цитата Сообщение от Heidegger Посмотреть сообщение
А для чего это может понадобиться? Может быть, нужно не округлить число, а напечатать его?
Нет,нужно именно округление.

Для чего это нужно? А почему обычно записывают только два знака после запятой у числа пи или у экспоненты?
0
Heidegger
28.09.2013, 20:01
  #5

Не по теме:

Цитата Сообщение от de-pre Посмотреть сообщение
А почему обычно записывают только два знака после запятой у числа пи или у экспоненты? :D
Хм, и правда, почему?

0
R2D2
28.09.2013, 22:58
  #6

Не по теме:

Цитата Сообщение от de-pre Посмотреть сообщение
А почему обычно записывают только два знака после запятой у числа пи или у экспоненты?
Может быть потому, что ТРИ значащих цифры считается достаточной точностью для инженерных расчетов.
Такие округления - дань памяти тем временам, когда люди вели даже серьезные расчеты на руками на бумаге и логарифмических линейках.
И еще, что касается количества цифр в числе ПИ, то мне на втором курсе преподаватель говорил, что для нормальных расчетов я должен знать это число хотя бы до 5го знака.
de-pre, это с Вас так в универе требуют?

0
32 / 31 / 1
Регистрация: 04.07.2013
Сообщений: 232
Записей в блоге: 1
28.09.2013, 23:47  [ТС] 7
Цитата Сообщение от R2D2 Посмотреть сообщение
de-pre, это с Вас так в универе требуют?
Ага.

Говорят,что учитывая возраст оборудования и его состояния,а так же наш "богатый" опыт эксперимента,то такое округление будет не критичным для результата.

Соответственно,для того,чтобы облегчить себе жизнь,расчеты по лабораторным теперь стараюсь делать в Матлабе,для чего мне собственно и нужна была сия информация.
0
617 / 242 / 16
Регистрация: 31.07.2013
Сообщений: 376
28.09.2013, 23:58 8
Цитата Сообщение от R2D2 Посмотреть сообщение
Такие округления - дань памяти тем временам, когда люди вели даже серьезные расчеты на руками на бумаге и логарифмических линейках.
Хранить лишние знаки смысла никакого нет, согласен. Но это скорее вопрос отображения чисел.

В любом случае в памяти компьютера числа хранятся в виде двоичных, а не десятичных дробей, потому попытка "обрезать" хвост, по сути, бессмысленна – он всё равно в результате останется:

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
>> a = 0.091
a =
    0.0910
 
>> b = round(a*100)/100
b =
    0.0900
 
>> fprintf('%.19f\n', a)
0.0909999999999999980
 
>> fprintf('%.19f\n', b)
0.0899999999999999970
0
Том Ардер
29.09.2013, 00:36
  #9

Не по теме:

Гаусс отмечал: «Недостатки математического образования с наибольшей отчётливостью проявляются в чрезмерной точности численных расчётов».

2
Heidegger
29.09.2013, 00:38
  #10

Не по теме:

Цитата Сообщение от Том Ардер Посмотреть сообщение
Гаусс отмечал: «Недостатки математического образования с наибольшей отчётливостью проявляются в чрезмерной точности численных расчётов».
Да, тоже искал эту цитату.

0
Эксперт по математике/физике
4217 / 3412 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
29.09.2013, 00:40 11
Цитата Сообщение от GVerdi Посмотреть сообщение
x=0.125; %Есть число которое нужно округлить до второго знака после запятой
x=round(x*100)/100
Это отбрасывание лишних знаков. Округление:
Matlab M
1
x=round(x*100 + 0.5)/100
0
617 / 242 / 16
Регистрация: 31.07.2013
Сообщений: 376
29.09.2013, 11:23 12
Цитата Сообщение от Том Ардер Посмотреть сообщение
Это отбрасывание лишних знаков. Округление:

Matlab M
1
x=round(x*100 + 0.5)/100
Разве? round ведь выполняет всю грязную работу сама. Тогда скорее так:

Matlab M
1
x = floor(x*100 + 0.5)/100
И если округлять для инженерных расчётов, то тогда уж до 3 значащих цифр:

Matlab M
1
2
3
4
5
6
7
8
9
function y = roundk(x, k)
% roundk(x, k) - округляет
% число x до k значащих цифр
if x == 0
    y = 0;
else
    n = -floor(log10(abs(x)))+k-1;
    y = round(x*10^n)/10^n;
end
Добавлено через 21 минуту

Не по теме:


А зачем для стиля кода явно выставляется высота:

--------------------------------------------------------------

PHP
1
style="overflow: auto; width: 750px; height: 46px"
--------------------------------------------------------------

визуально добавляя при этом лишнюю строку снизу.

1
Эксперт по математике/физике
4217 / 3412 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
29.09.2013, 13:53 13
Цитата Сообщение от Heidegger Посмотреть сообщение
Код Matlab M
1
x=round(x*100 + 0.5)/100
Разве? round ведь выполняет всю грязную работу сама. Тогда скорее так:
Код Matlab M
1
x = floor(x*100 + 0.5)/100

Не по теме:

Да, mea culpa.

Напутал, вспомнив похожую функцию, которую когда-то сочинял для округления до заданного количества знаков.

1
29.09.2013, 13:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.09.2013, 13:53
Помогаю со студенческими работами здесь

Округление
Здравствуйте! Подскажите, пожалуйста, как в МАТЛАБе округлять число до десятых, сотых и т.п?.

Округление
Кто-нибудь может помочь в написании программы. Допустим есть 120540 отсчетов, если мы делим отсчеты...

Округление
По задаче необходимо для отношения двух переменных подобрать константу. Условно: для a/b=1, c=3;...

Округление с помощью floor
Одним из применений функции "floor" является округление значения числа до заданного десятичного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru