Как перевести число в абсолютное значение (15.1к = 15100)

LightWood

Moderator
Регистрация
04.11.2010
Сообщения
2 382
Благодарностей
915
Баллы
113
Паршу сайт.
Там есть значения вида 15.1K или 12.34M.
Т.е. когда K - это тысячи, M - миллионы.
Мне нужно записать в итоге в виде 15100 и 12340000 соответственно.

Не понимаю, как это по-простому сделать. Распаршивать букву, символы после точки и делать кучу условий. Ибо может быть символ после точки, 2 символа или ничего не быть. Потом переносить эту точку, дописывать нули. Крайне заморочным это вижу.

Как это попроще решить? Если кто-то может подсказать решение или со снипетом помочь, то буду очень благодарен.

Спасибо!
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 361
Благодарностей
8 647
Баллы
113
Как это попроще решить?
Проще всего, отбрасывать букву и в соотв. с буквой умножать на 1000 или на 1000000
Например через JS: 12.34 * 1000000
Через C# - аналогично.
Но без условий не обойтись: если M, то присваиваем переменной 1000000, если К, то 1000.
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 952
Благодарностей
779
Баллы
113
при текущем положении дел - надо делать словарь символов и комбинаций символов
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 159
Благодарностей
2 159
Баллы
113
Вот отрывок моего говнокода из проекта где подобная задача стояла, искал статистику посещений за месяц и делил на 30, чтобы узнать дневную:
C#:
var post0 = instance.ActiveTab.FindElementByXPath(@"//div[@class='value']", 0); // тут по XPath ищем тело блока, в котором нужные цифры
if (!post0.IsVoid)
{
    string innertext = post0.InnerText.Trim();
    innertext = System.Text.RegularExpressions.Regex.Replace(innertext, @"[^MBK\.,\d]", ""); //заменяем все кроме цифр, точки, запятой и наших буквенных приставок
    // запятыми вроде у меня просто разделялось число для удобства чтения, то есть их можно удалить. Ну и если была запятая, то приставок миллион\миллиард на доноре не было, то есть это обычное число:
    if (innertext.Contains(","))
    {
        innertext = System.Text.RegularExpressions.Regex.Replace(innertext, @",", "");
        double innertext_double = double.Parse(innertext);
        innertext_double = innertext_double / 30;
        int innertext_int = Convert.ToInt32(innertext_double);
        project.Variables["DailyVisits"].Value = innertext_int.ToString();
    
    }
    // если содержит миллиард (Billion):
    if (innertext.Contains("B"))
    {
        innertext = System.Text.RegularExpressions.Regex.Replace(innertext, "B", "");
        project.SendInfoToLog(innertext, false);
        string separator = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator[0].ToString();
        innertext = System.Text.RegularExpressions.Regex.Replace(innertext, @"\.", separator);
        project.SendInfoToLog(innertext, false);
        //project.Variables["DailyVisits"].Value = separator.ToString();
        double innertext_double = double.Parse(innertext);
        innertext_double = innertext_double * 1000000000 / 30;
        int innertext_int = Convert.ToInt32(innertext_double);
        project.Variables["DailyVisits"].Value = innertext_int.ToString();
    }
    // если содержит миллион:
    if (innertext.Contains("M"))
    {
        innertext = System.Text.RegularExpressions.Regex.Replace(innertext, "M", "");
        project.SendInfoToLog(innertext, false);
        string separator = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator[0].ToString();
        innertext = System.Text.RegularExpressions.Regex.Replace(innertext, @"\.", separator);
        project.SendInfoToLog(innertext, false);
        //project.Variables["DailyVisits"].Value = separator.ToString();
        double innertext_double = double.Parse(innertext);
        innertext_double = innertext_double * 1000000 / 30;
        int innertext_int = Convert.ToInt32(innertext_double);
        project.Variables["DailyVisits"].Value = innertext_int.ToString();
    }
}
Если не надо на 30 делить, то удалите " / 30".
 

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