как обрезать число не округляя в c#

Регистрация
13.04.2016
Сообщения
660
Реакции
53
Баллы
28
приветствую уважаемые гуру цифрового мира!
подскажите кто силён в коде, как правильно обрезать число такого вида:

0.123456789012

например так:
0.12345

т.е. не округляя его, регулярками делать громоздко.
спасибо!
 
получаются неверные значения. нужны точные данные.
 
  • Оценить
Реакции: Анатолий
спасибо! но скругление не прокатит в моём случае.

1) Странно, что не прокатит, если округлять в меньшую сторону - получается аналог "обрезания" которое ты хочешь.
int pull = 0.123456789
int result = 0.12345(6789) вниз....

int pull - 2136.4638264
int result - 2136.463(8264).

2) Через стринг вариант не прокатит, он повышает вроде при обрезании строки, сейчас прикину, хоть и компилятора нет под рукой...
 
  • Оценить
Реакции: Анатолий
Попробуй конечно стринг.... но я хз сработает ли.

C#:
Развернуть Свернуть Копировать
float pull = 0.123456789101112

string mem = Convert.ToString(pull);

mem = mem.Substring(0, mem.Length - x); // где x - сколько с конца удалить.

/* или можно вот так

int index = mem.Length - 1; //количество символов

mem = mem.Remove(x, index - x); // где x - начало откуда нужно "отрезать"

*/

//потом возвращаешь во float

pull = ConvertToSingle(mem); // Вроде так....
Я вообще новичок и не в теме :an::do:
 
  • Оценить
Реакции: Анатолий
Если из того что я тебе предложил:
В случае если у тебя чисто положительные числа всегда -
Math.Floor округляет вниз по направлению к отрицательной бесконечности.
Вот этот метод подойдет
 
  • Оценить
Реакции: Анатолий
Попробуй конечно стринг.... но я хз сработает ли.

C#:
Развернуть Свернуть Копировать
float pull = 0.123456789101112

string mem = Convert.ToString(pull);

mem = mem.Substring(0, mem.Length - x); // где x - сколько с конца удалить.

/* или можно вот так

int index = mem.Length - 1; //количество символов

mem = mem.Remove(x, index - x); // где x - начало откуда нужно "отрезать"

*/

//потом возвращаешь во float

pull = ConvertToSingle(mem); // Вроде так....
Я вообще новичок и не в теме :an::do:
 
фишка в том, что после точки может быть 6 цифр, а может быть и 15...
удаление с конца не подойдёт.

в любом случае благодарю за попытку помочь.
скругление не подходит не в какую сторону, буду тогда кубиками обрезать число.
 
фишка в том, что после точки может быть 6 цифр, а может быть и 15...
удаление с конца не подойдёт.

в любом случае благодарю за попытку помочь.
скругление не подходит не в какую сторону, буду тогда кубиками обрезать число.

Отвечаю сразу на два твоих поста.
1) неявное преобразование значит, что ты объявляешь новую переменную в C# из переменной проекта (которые всегда в стринге).
Тебе надо: .ToSingle для твоей переменной из проекта прописать. Довести переменную test <string> до pull <float(single)>

2) Ещё раз по логике...

int index = mem.Length - 1; //длина твоей переменной пофигу сколько в ней цифр
mem = mem.Remove(x, index - x); // первый х - нужно тебе например 5 цифр с НАЧАЛА - эта функция отрежет Index-5 символов и оставит тебе x - 5;
 
  • Оценить
Реакции: Анатолий
фишка в том, что после точки может быть 6 цифр, а может быть и 15...
удаление с конца не подойдёт.

в любом случае благодарю за попытку помочь.
скругление не подходит не в какую сторону, буду тогда кубиками обрезать число.

А вообще оно тебе нафиг не надо первое преобразование, если у тебя переменная в проекте висит. Т.к. она типа стринг - из последнего моего поста формула подойдёт.
 
  • Оценить
Реакции: Анатолий
  • Оценить
Реакции: Анатолий
ну у тебя же твоём коде, который тебе не нравился, как-то переменная передавалась. Передай также
тут можно поподробнее:
вот этот скруглитель работает.
как сделать чтобы он стал обрезателем?

return System.Math.Round(Convert.ToDecimal(project.Variables["test"].Value), 8 ) ;
 
тут можно поподробнее:
вот этот скруглитель работает.
как сделать чтобы он стал обрезателем?

return System.Math.Round(Convert.ToDecimal(project.Variables["test"].Value), 8 ) ;

Всё прекрасно работает. Иди разбирайся с кодом.
42494
 
  • Оценить
Реакции: Анатолий
Переводишь число в строку, субстрингом обрезаешь нужное количество символов, конвертишь обратно в число.
 
  • Оценить
Реакции: Astraport
а если перед точкой другое число цифр? а если после? А если число отрицательное?

утёрся) я изначально предположил, что у него числа только положительные и диапазон от 0 до 1 . Можно конечно ещё поиск позиции точки встроить, но это уже сложнее чем операнд предложенный выше.
 
Можно конечно ещё поиск позиции точки встроить, но это уже сложнее чем операнд предложенный выше.

Без проверки на ошибки, достаточно просто

C#:
Развернуть Свернуть Копировать
        double chislo = 0.123456789012;
        
        string stroka = chislo.ToString();
        
        var data = stroka.Split('.');
        
        string drobnaya = data[1];
        
        drobnaya = drobnaya.Substring(0, 5); // сколько оставить.
        
        string result = data[0] + "." + drobnaya;
 
Без проверки на ошибки, достаточно просто

C#:
Развернуть Свернуть Копировать
        double chislo = 0.123456789012;
       
        string stroka = chislo.ToString();
       
        var data = stroka.Split('.');
       
        string drobnaya = data[1];
       
        drobnaya = drobnaya.Substring(0, 5); // сколько оставить.
       
        string result = data[0] + "." + drobnaya;

Угу. В моем понимании "Сложнее" это просто количество строк в конструкции)) К чему мы и пришли) Отличный выход, я примерно так себе всё и представлял.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)