Разделите двойное на два типа int, один int перед десятичной точкой и один после - PullRequest
16 голосов
/ 06 ноября 2011

Мне нужно разделить двойное значение на два целых числа, одно до десятичной точки и одно после.Int после десятичной точки должен иметь две цифры.

Пример:

    10.50 = 10 and 50
    10.45 = 10 and 45
    10.5  = 10 and 50

Ответы [ 13 ]

24 голосов
/ 06 ноября 2011

Вот как вы могли бы это сделать:

string s = inputValue.ToString("0.00", CultureInfo.InvariantCulture);
string[] parts = s.Split('.'); 
int i1 = int.Parse(parts[0]);
int i2 = int.Parse(parts[1]);
16 голосов
/ 06 ноября 2011

Манипулирование строками может быть медленным. Попробуйте использовать следующее:

double number;

long intPart = (long) number;
double fractionalPart = number - intPart;
7 голосов
/ 06 ноября 2011

Какой язык программирования вы хотите использовать для этого?Большая часть языка должна иметь оператор по модулю .Пример C ++:

double num = 10.5;
int remainder = num % 1
4 голосов
/ 29 января 2013
"10.50".Split('.').Select(int.Parse);
3 голосов
/ 31 августа 2015
/// <summary>
/// Get the integral and floating point portions of a Double
/// as separate integer values, where the floating point value is 
/// raised to the specified power of ten, given by 'places'.
/// </summary>
public static void Split(Double value, Int32 places, out Int32 left, out Int32 right)
{
    left = (Int32)Math.Truncate(value);
    right = (Int32)((value - left) * Math.Pow(10, places));
}

public static void Split(Double value, out Int32 left, out Int32 right)
{
    Split(value, 1, out left, out right);
}

Использование:

Int32 left, right;

Split(10.50, out left, out right);
// left == 10
// right == 5

Split(10.50, 2, out left, out right);
// left == 10
// right == 50

Split(10.50, 5, out left, out right);
// left == 10
// right == 50000
2 голосов
/ 06 ноября 2011

Еще один вариант, который не включает в себя манипуляции со строками:

static void Main(string[] args)
{
    decimal number = 10123.51m;
    int whole = (int)number;
    decimal precision = (number - whole) * 100;

    Console.WriteLine(number);
    Console.WriteLine(whole);
    Console.WriteLine("{0} and {1}",whole,(int) precision);
    Console.Read();
}

Убедитесь, что они десятичные или вы получаете обычное странное поведение с плавающей запятой / двойное.

1 голос
/ 04 ноября 2017

как насчет?

var n = 1004.522
var a = Math.Floor(n);
var b = n - a;
1 голос
/ 29 января 2013

Эта функция займет время в десятичном формате и преобразуется обратно в основание 60.

    public string Time_In_Absolute(double time)
    {
        time = Math.Round(time, 2);
        string[] timeparts = time.ToString().Split('.');                        
        timeparts[1] = "." + timeparts[1];
        double Minutes = double.Parse(timeparts[1]);            
        Minutes = Math.Round(Minutes, 2);
        Minutes = Minutes * (double)60;
        return string.Format("{0:00}:{1:00}",timeparts[0],Minutes);
        //return Hours.ToString() + ":" + Math.Round(Minutes,0).ToString(); 
    }
1 голос
/ 06 ноября 2011

вы можете разбить строку и затем преобразовать в int ...

string s = input.ToString(); 
string[] parts = s.Split('.');
0 голосов
/ 06 апреля 2017

Использование Linq. Просто уточнение ответа @Denis.

var splt = "10.50".Split('.').Select(int.Parse);
int i1 = splt.ElementAt(0);
int i2 = splt.ElementAt(2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...