C# объединить несколько кубиков.

PROforum

Client
Регистрация
17.08.2014
Сообщения
252
Благодарностей
19
Баллы
18
Есть такая конструкция, для обрезки нужного кол-ва символов после точки. помогите объединить в один кубик.
44554
 

Вложения

  • 36,5 КБ Просмотры: 131

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
93
Через свич

C#:
string str = project.Variables["Summa_para_2"].Value.Replace(".",",").Trim();
string ToDelimiter = str.Split(',')[0];
string AfterTheSeparator = str.Split(',')[1];

string Pruning = string.Empty;

switch (project.Variables["kratnij_loty"].Value) {
    
    case "1.00000000":
        
        Pruning = AfterTheSeparator.Substring(0, 0);
        break;
        
    case "0.10000000":

        Pruning = AfterTheSeparator.Substring(0, 1);
        break;
        
    case "0.01000000":

        Pruning = AfterTheSeparator.Substring(0, 2);
        break;
}

project.Variables["Summa_para_2"].Value = ToDelimiter + "" + Pruning;
 

zarufakis

Client
Регистрация
22.03.2019
Сообщения
1 743
Благодарностей
1 137
Баллы
113
Я не претендую на знание ЯП, но почему у тебя числа с запятой записаны как string?
 

PROforum

Client
Регистрация
17.08.2014
Сообщения
252
Благодарностей
19
Баллы
18

PROforum

Client
Регистрация
17.08.2014
Сообщения
252
Благодарностей
19
Баллы
18
Через свич

C#:
string str = project.Variables["Summa_para_2"].Value.Replace(".",",").Trim();
string ToDelimiter = str.Split(',')[0];
string AfterTheSeparator = str.Split(',')[1];

string Pruning = string.Empty;

switch (project.Variables["kratnij_loty"].Value) {
   
    case "1.00000000":
       
        Pruning = AfterTheSeparator.Substring(0, 0);
        break;
       
    case "0.10000000":

        Pruning = AfterTheSeparator.Substring(0, 1);
        break;
       
    case "0.01000000":

        Pruning = AfterTheSeparator.Substring(0, 2);
        break;
}

project.Variables["Summa_para_2"].Value = ToDelimiter + "" + Pruning;
К сожалению не работает. 0.10000000 обрезая 0.123456789 получается 01, 0.01000000 получается 012
 

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
93
К сожалению не работает. 0.10000000 обрезая 0.123456789 получается 01, 0.01000000 получается 012
Я набросал пример свича, в твоем случае, тебе нужно смотреть в каком формате приходят значения.
 
  • Спасибо
Реакции: PROforum

PROforum

Client
Регистрация
17.08.2014
Сообщения
252
Благодарностей
19
Баллы
18
вот в таком формате :
0.10000000
0.01000000
0.00100000
как можно подправить код, чтоб он работал?
 

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
93
Ты лучше объясни, что тебе нужно получить. У меня сомнения, что реализация кода через свич в твоем шаблоне работала. Свич работает по точному вхождению, а у тебя нужно сравнивать, если я правильно понял.

Еще раз, у тебя на входе число 0.123456789. Оно находится между значениями 1.00000000 и 0.10000000. Значит тебе нужно получить AfterTheSeparator.Substring(0, 1) - ?
Т.е. если у тебя число > 1.00000000 then AfterTheSeparator.Substring(0, 0);
Если > 0.10000000 && < 1.00000000 then AfterTheSeparator.Substring(0, 1);

Такая логика?
 

PROforum

Client
Регистрация
17.08.2014
Сообщения
252
Благодарностей
19
Баллы
18
Переменная ["kratnij_loty"] получает значение (0.10000000 либо 0.01000000 либо 0.00100000 и тд. до 0.00000001), взависимости от полученого значения в переменной ["Summa_para_2"] число обрезается до определённого знака:

0.10000000 - 0.12345678 обрезаем до первого знака после точки - 0.1
0.01000000 - 0.12345678 обрезаем до второго знака после точки - 0.12
0.00100000 - 0.12345678 обрезаем до третьего знака после точки - 0.123
и так далее.
Шаблон высланный мной хорошо работает, только он большой, хотелось при помощи свич запихать его в один кубик.
 

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
93
Переменная ["kratnij_loty"] получает значение (0.10000000 либо 0.01000000 либо 0.00100000 и тд. до 0.00000001), взависимости от полученого значения в переменной ["Summa_para_2"] число обрезается до определённого знака:

0.10000000 - 0.12345678 обрезаем до первого знака после точки - 0.1
0.01000000 - 0.12345678 обрезаем до второго знака после точки - 0.12
0.00100000 - 0.12345678 обрезаем до третьего знака после точки - 0.123
и так далее.
Шаблон высланный мной хорошо работает, только он большой, хотелось при помощи свич запихать его в один кубик.
Да, уже допер, что эти грабли для округления.
Набросал, уже дальше сам доделай по аналогии.

C#:
double d = double.Parse("0.003456789", System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture);

string round = string.Empty;

if (d > 1.00000000) round = System.Math.Round(d, 0).ToString(System.Globalization.CultureInfo.InvariantCulture);
else if (d > 0.10000000 && d < 1.00000000) round = System.Math.Round(d, 1).ToString(System.Globalization.CultureInfo.InvariantCulture);
else if (d > 0.01000000 && d < 0.10000000) round = System.Math.Round(d, 2).ToString(System.Globalization.CultureInfo.InvariantCulture);
else if (d > 0.00100000 && d < 0.01000000) round = System.Math.Round(d, 3).ToString(System.Globalization.CultureInfo.InvariantCulture);

return round;
 
  • Спасибо
Реакции: PROforum

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