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

LightWood

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

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

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

Спасибо!
 

Sergodjan

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

arhip1985

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

orka13

Client
Регистрация
07.05.2015
Сообщения
2 190
Благодарностей
2 208
Баллы
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)