วิธีที่ดีที่สุดในการแปลง a double
เป็นint
คืออะไร? ควรใช้ cast หรือไม่
etc.
:)
วิธีที่ดีที่สุดในการแปลง a double
เป็นint
คืออะไร? ควรใช้ cast หรือไม่
etc.
:)
คำตอบ:
คุณสามารถใช้เพี้ยนถ้าคุณต้องการพฤติกรรม truncate-to-zero เริ่มต้น หรือคุณอาจต้องการใช้Math.Ceiling
, Math.Round
, Math.Floor
ฯลฯ - แม้ว่าคุณยังจะต้องโยนหลังจากนั้น
อย่าลืมว่าช่วงของมีขนาดเล็กกว่าช่วงของint
double
โยนจากdouble
ถึงint
จะไม่โยนข้อยกเว้นถ้าค่าอยู่นอกช่วงของint
ในบริบทที่ไม่ถูกตรวจสอบในขณะที่การเรียกร้องให้Convert.ToInt32(double)
จะ ผลลัพธ์ของการส่ง (ในบริบทที่ไม่ได้ตรวจสอบ) นั้นไม่ได้กำหนดอย่างชัดเจนหากค่าอยู่นอกช่วง
int
เป็น 32 บิตเสมอไม่ว่าคุณจะใช้เครื่อง 32 หรือ 64 บิตก็ตาม
intVal = System.Convert.ToInt32(System.Math.Floor(dblVal));
using System;
ที่ด้านบนสุดของไฟล์ซึ่งอาจเป็นได้intVal = Convert.ToInt32(Math.Floor(dblVal));
using
คำสั่ง
หากคุณใช้งานแคสต์นั่นคือ(int)SomeDouble
คุณจะตัดทอนส่วนที่เป็นเศษส่วน นั่นคือถ้าSomeDouble
เป็น 4.9999 ผลลัพธ์จะเป็น 4 ไม่ใช่ 5 การแปลงเป็น int จะไม่ปัดเศษจำนวนนั้น หากคุณต้องการปัดเศษการใช้งานMath.Round
ใช่ทำไมล่ะ
double someDouble = 12323.2;
int someInt = (int)someDouble;
การใช้Convert
คลาสใช้งานได้ดีเช่นกัน
int someOtherInt = Convert.ToInt32(someDouble);
Convert.ToInt32
เป็นวิธีที่ดีที่สุดในการแปลง
วิธีที่ดีที่สุดคือใช้ Convert.ToInt32
วิธีที่ดีที่สุดก็คือการใช้งานมันเร็วและรอบได้อย่างถูกต้อง
ทำไมจึงซับซ้อนกว่านี้?
นี่คือตัวอย่างที่สมบูรณ์
class Example
{
public static void Main()
{
double x, y;
int i;
x = 10.0;
y = 3.0;
// cast double to int, fractional component lost (Line to be replaced)
i = (int) (x / y);
Console.WriteLine("Integer outcome of x / y: " + i);
}
}
หากคุณต้องการปัดเศษตัวเลขเป็นจำนวนเต็มให้ทำดังนี้
i = (int) Math.Round(x / y); // Line replaced
Convert.ToInt32
ผมคิดว่าวิธีที่ดีที่สุดคือ
int myInt = (int) Math.Ceiling (myDouble);
วิธีการของฉันคือ:
- Convert.ToInt32(double_value)
- (int)double_value
- Int32.Parse(double_value.ToString());
double_value = 0.1
label8.Text = "" + years.ToString("00") + " years";
เมื่อคุณต้องการส่งไปที่ป้ายกำกับหรือบางสิ่งและคุณไม่ต้องการส่วนประกอบที่เป็นเศษส่วนนี่เป็นวิธีที่ดีที่สุด
label8.Text = "" + years.ToString("00.00") + " years";
ถ้าคุณต้องการเพียง 2 และมันก็เป็นอย่างนั้นเสมอ