variable float entera decimales convertir con c# double int decimal-point

c# - entera - convertir float a int java



Dividir el doble en dos int, uno int antes del punto decimal y otro después (13)

¿Qué lenguaje de programación quieres usar para hacer esto? La mayor parte del idioma debe tener un operador de módulo . Ejemplo de C ++:

double num = 10.5; int remainder = num % 1

Necesito dividir un valor doble, en dos valores int, uno antes del punto decimal y otro después. El int después del punto decimal debe tener dos dígitos.

Ejemplo:

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


¿qué tal si?

var n = 1004.522 var a = Math.Floor(n); var b = n - a;


Así es como puedes hacerlo:

string s = inputValue.ToString("0.00", CultureInfo.InvariantCulture); string[] parts = s.Split(''.''); int i1 = int.Parse(parts[0]); int i2 = int.Parse(parts[1]);


De hecho, solo tuve que responder esto en el mundo real y, si bien la respuesta de @David Samuel hizo parte de esto, es el código resultante que usé. Como se dijo antes, las cuerdas son demasiado sobrecarga. Tuve que hacer este cálculo a través de los valores de píxeles en un video y aún pude mantener 30 fps en una computadora moderada.

double number = 4140 / 640; //result is 6.46875 for example int intPart = (int)number; //just convert to int, loose the dec. int fractionalPart = (int)((position - intPart) * 1000); //rounding was not needed. //this procedure will create two variables used to extract [iii*].[iii]* from iii*.iii*

Esto se usó para resolver x, y a partir del conteo de píxeles en 640 X 480 video.


Esta función tomará tiempo en decimal y se convertirá de nuevo en la base 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(); }


La manipulación de las cuerdas puede ser lenta. Trate de usar lo siguiente:

double number; long intPart = (long) number; double fractionalPart = number - intPart;


Otra variación que no implica la manipulación de cuerdas:

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(); }

Asegúrate de que sean decimales o de que obtengas el extraño comportamiento habitual de flotación / doble.


Puedes hacerlo sin pasar por cuerdas. Ejemplo:

foreach (double x in new double[]{10.45, 10.50, 10.999, -10.323, -10.326, 10}){ int i = (int)Math.Truncate(x); int f = (int)Math.Round(100*Math.Abs(x-i)); if (f==100){ f=0; i+=(x<0)?-1:1; } Console.WriteLine("("+i+", "+f+")"); }

Salida:

(10, 45) (10, 50) (11, 0) (-10, 32) (-10, 33) (10, 0)

Sin embargo, no funcionará para un número como -0.123 . Por otra parte, no estoy seguro de cómo encajaría con su representación.


Tratar:

string s = "10.5"; string[] s1 = s.Split(new char[] { "." }); string first = s1[0]; string second = s1[1];


Usando Linq. Solo una aclaración de la respuesta de @Denis.

var splt = "10.50".Split(''.'').Select(int.Parse); int i1 = splt.ElementAt(0); int i2 = splt.ElementAt(2);


puede dividir con cadena y luego convertir en int ...

string s = input.ToString(); string[] parts = s.Split(''.'');


/// <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); }

Uso:

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


"10.50".Split(''.'').Select(int.Parse);