Округлить число с плавающей точкой
От: Alexei_z_  
Дата: 30.03.05 11:34
Оценка:
Добрый день,
возникла следующая проблема:

Нужно округлить число с плавающей точкой.
Например, у меня есть
0.10000000005
я хочу сделать 0.10
у меня есть 0.2500000009
я хочу 0.25

Как это сделать в C#?
Пробовал так:

int value = 5;
float val = (float)value;
val =val/100; //val = 0.0500000007
float valR = (float)Math.Round(val,1); //=0.100000001
valR = (float)Math.Round(val,2); //=0.0500000007
valR = (float)Math.Round(val,3);//=0.0500000007


?
Re: Округлить число с плавающей точкой
От: Unforgiver Россия  
Дата: 30.03.05 11:47
Оценка:
Здравствуйте, Alexei_z_, Вы писали:

A__>Добрый день,

A__>возникла следующая проблема:

A__>Нужно округлить число с плавающей точкой.

A__>Например, у меня есть
A__>0.10000000005
A__>я хочу сделать 0.10
A__>у меня есть 0.2500000009
A__>я хочу 0.25

A__>Как это сделать в C#?

A__>Пробовал так:

A__>
A__>int value = 5;
A__>float val = (float)value;
A__>val =val/100; //val = 0.0500000007
A__>float valR = (float)Math.Round(val,1); //=0.100000001
A__>valR = (float)Math.Round(val,2); //=0.0500000007
A__>valR = (float)Math.Round(val,3);//=0.0500000007
A__>


A__>?


Тебе для расчетов или для вывода на экран (принтер) ?
Если для расчетов, то всё правильно (у меня кстати, округляются до тех знаков, что указаны, т.е.


valR = (float)Math.Round(val,2); //=0.05


А если тебе надо вывести на печать :

string S = valR.ToString("0.00");
Всё заканчивается плохо. Если что-то закончилось хорошо — значит оно еще не закончилось.
Re[2]: Округлить число с плавающей точкой
От: Alexei_z_  
Дата: 30.03.05 12:03
Оценка:
Здравствуйте, Unforgiver, Вы писали:

U>Здравствуйте, Alexei_z_, Вы писали:


A__>>Добрый день,

A__>>возникла следующая проблема:

A__>>Нужно округлить число с плавающей точкой.

A__>>Например, у меня есть
A__>>0.10000000005
A__>>я хочу сделать 0.10
A__>>у меня есть 0.2500000009
A__>>я хочу 0.25

A__>>Как это сделать в C#?

A__>>Пробовал так:

A__>>
A__>>int value = 5;
A__>>float val = (float)value;
A__>>val =val/100; //val = 0.0500000007
A__>>float valR = (float)Math.Round(val,1); //=0.100000001
A__>>valR = (float)Math.Round(val,2); //=0.0500000007
A__>>valR = (float)Math.Round(val,3);//=0.0500000007
A__>>


A__>>?


U>Тебе для расчетов или для вывода на экран (принтер) ?

U>Если для расчетов, то всё правильно (у меня кстати, округляются до тех знаков, что указаны, т.е.


U>
U>valR = (float)Math.Round(val,2); //=0.05
U>


U>А если тебе надо вывести на печать :


U>
U>string S = valR.ToString("0.00");
U>


Да, в том то и дело — на одной машине правильно — на второй — нет.
Мне для расчетов.
Re: Округлить число с плавающей точкой
От: Igor Trofimov  
Дата: 30.03.05 12:14
Оценка:
A__>
A__>valR = (float)Math.Round(val,2); //=0.0500000007
A__>


Округляешь и тут же приводишь снова к float, теряя точность.
Используй для повышения точности double или (особенно для денежных расчетов) decimal.
Re[3]: Округлить число с плавающей точкой
От: DuШes  
Дата: 30.03.05 12:16
Оценка:
Здравствуйте, Alexei_z_, Вы писали:
[...]

ребят, я конечно дико извиняюсь, но темы читают все ...ну вобщем, какбы сказать, делаете вот так [...]
Re[2]: Округлить число с плавающей точкой
От: Alexei_z_  
Дата: 30.03.05 13:32
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:
iT>Округляешь и тут же приводишь снова к float, теряя точность.
iT>Используй для повышения точности double или (особенно для денежных расчетов) decimal.

Я понимаю, что теряю точвность
В сущонсти, мне нужна точность до 3-го знака. Эти числа используются в матрице преобразования
Проблему я кое-как решил — просто округляю к бижайшему когда нужно(0.49999->5.00) а при переводе в строку уже задаю количество знаков
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.