วิธีการแปลง double เป็น int ใน Dart?


96

สิ่งต่อไปนี้ก่อให้เกิดข้อผิดพลาดด้านล่าง:

int calc_ranks(ranks)
{
  double multiplier = .5;
  return multiplier * ranks;
}

ประเภทผลตอบแทนdoubleไม่ได้เป็นตามที่กำหนดโดยวิธีการint calc_ranksฉันจะปัดเศษ / ส่งไปที่int?

คำตอบ:


128

ปัดโดยใช้round()วิธีการ:

int calc_ranks(ranks) {
    double multiplier = .5;
    return (multiplier * ranks).round();
}

13
หรือตัดทอนเป็น int: return (ตัวคูณ * อันดับ) .toInt (); (ดูapi.dartlang.org/docs/channels/stable/latest/dart_core/… )
เอฟเวอร์ตัน

2
@ ความคิดฉันมีกรณีที่(0.57 * 100).toInt()แก้ไขได้56ดังนั้นพวกเขาโปรดระวัง
最白目

68

คุณก็สามารถใช้toInt ()การแปลงไปยังnumint

int calc_ranks(ranks)
{
  double multiplier = .5;
  return (multiplier * ranks).toInt();
}

โปรดทราบว่าในการทำสิ่งเดียวกันทุกประการคุณสามารถใช้ตัวดำเนินการตัดทอนการแบ่ง :

int calc_ranks(ranks) => ranks ~/ 2;

65

คุณสามารถใช้สิ่งต่อไปนี้

double d = 20.5;

int i = d.toInt(); // i = 20
int i = d.round(); // i = 21
int i = d.ceil();  // i = 21
int i = d.floor(); // i = 20

ดังนั้นอะไรคือความแตกต่างระหว่าง toInt และ floor หรือ round กับ ceil
Hector Aguero

0

โผรอบสองครั้งเป็น int

เมื่อใช้round()วิธีการเราจะได้จำนวนเต็มที่ใกล้เคียงกับคู่

ตัวอย่างเช่น:

int num1 = (2.3).round();
// 2

int num2 = (2.5).round();
// 3

int num3 = (-2.3).round();
// -2

int num4 = (-2.5).round();
// -3

คุณยังสามารถลองใช้วิธีการเหล่านั้นแปลง double เป็น int ใน Flutter

  double x = 2.5;
 
  int a = x.toInt();
  int b = x.truncate();
  int c = x.round();
  int d = x.ceil();
  int e = x.floor();
 
  print(a); // 2
  print(b); // 2
  print(c); // 3
  print(d); // 3
  print(e); // 2

ประการแรกคำถามนี้ไม่ได้เกี่ยวกับความroundหมายใน Dart ประการที่สองสิ่งที่เหลือจะคัดลอกมาจากคำตอบที่มีอยู่เท่านั้น กรุณาอย่าสแปมเช่นนี้ คุณกำลังคัดลอกคำตอบอื่น ๆ เท่านั้น
iDecode

@iDecode ถาม: "จะแปลง double เป็น int ใน Dart ได้อย่างไร" คำตอบนี้: "การใช้ round () เราจะได้จำนวนเต็มที่ใกล้เคียงที่สุด" คุณคิดว่าคำตอบไม่เกี่ยวข้องกับคำถามได้อย่างไร?
Ruben

@Ruben คำตอบนี้มีให้แล้วโดยผู้ใช้รายอื่น ไม่มีประโยชน์ในการโพสต์สิ่งเดิมซ้ำแล้วซ้ำเล่า
iDecode

ฉันได้บอกคุณไปแล้วว่าจากนี้ไปฉันจะดูแล แต่ทำไมคุณถึงแสดงความคิดเห็นด้วยการลงคะแนน แม้ว่าวิธีการนี้จะเหมือนกัน แต่พยายามอธิบายให้แตกต่างออกไปด้วยวิธีนี้ฉันได้ยกตัวอย่างวิธีการรับหมายเลข
Paresh Mangukiya

ในสิ่งนี้ฉันได้พยายามอธิบายว่าจำนวนเต็มใกล้เคียงกับคู่มากที่สุดอย่างไร โดยนี้ int num1 = (2.3) .round (); // 2 int num2 = (2.5) .round (); // 3 int num3 = (-2.3) .round (); // -2 int num4 = (-2.5) .round (); // -3
Paresh Mangukiya
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.