ความแตกต่างระหว่าง Math.Floor () และ Math.Truncate ()


422

ความแตกต่างระหว่างMath.Floor()และMath.Truncate()ใน. NET คืออะไร?


8
เช่น Math.Floor (5.4) = 5 Math.Truncate (5.4) = 5
subramani

3
คุณต้องการสิ่งนี้จริงๆหลังจาก 10 ปี lol
L_Church

1
ทำไมหลังจาก 10 ปีจะมีค่าหัว? มีคำตอบมากมายแล้ว มีบางอย่างที่ฉันหายไปไหม
แอ่งน้ำ

3
ผู้ชายคนนี้ถามเพียง 1 คำถามและออกจากเว็บไซต์ตั้งแต่ ฉันเดาว่านั่นคือทั้งหมดที่เขาอยากรู้ .. : D
Nikos

คำตอบ:


484

Math.FloorปัดเศษลงMath.Ceilingปัดเศษขึ้นและMath.Truncateปัดเศษเข้าหาศูนย์ ดังนั้นจึงMath.Truncateเป็นเช่นMath.FloorสำหรับตัวเลขบวกและชอบMath.Ceilingตัวเลขลบ นี่คือการอ้างอิง

เพื่อความสมบูรณ์Math.Roundปัดเศษเป็นจำนวนเต็มที่ใกล้ที่สุด หากตัวเลขอยู่กึ่งกลางระหว่างจำนวนเต็มสองจำนวนพอดีมันจะปัดเศษเป็นเลขคู่ การอ้างอิง

ดูเพิ่มเติม: คำตอบของท่าน Diablo แนะนำเป็นอย่างยิ่ง!


31
@Chris ฉันขอแนะนำให้คุณแก้ไขคำอธิบายของ Round มีสองวิธีในการปัดเศษ (AwayFromZero และ ToEven) และจะไม่ปัดเป็นจำนวนเต็มที่ใกล้ที่สุดเนื่องจากสามารถทำการปัดเศษแบบเศษส่วนได้เช่นกัน
paxdiablo

1
ดังนั้นเพียงเพิ่มสั้น ๆ กับคำถามเดิม - อะไรคือความแตกต่างระหว่าง Math.Truncate และเพียงแค่เลือกทศนิยมหรือสองเท่าให้เป็น int? มันจะไม่เป็นเพียงแค่ไปสู่ศูนย์?
Noam Gal

8
เมื่อไม่(int)myDoubleแตกต่างจาก(int)Math.Truncate(myDouble)?
mpen

2
อะไร(int) เท่ากับในชั้นเรียนคณิตศาสตร์?
Lei Yang

386

ไปที่ลิงก์เหล่านี้สำหรับคำอธิบาย MSDN ของ:

  • Math.Floorซึ่งปัดลงไปทางลบอนันต์
  • Math.Ceilingซึ่งปัดขึ้นไปหาอนันต์บวก
  • Math.Truncateซึ่งปัดขึ้นหรือลงสู่ศูนย์
  • Math.Roundซึ่งจะปัดเศษเป็นจำนวนเต็มที่ใกล้ที่สุดหรือจำนวนตำแหน่งทศนิยมที่ระบุ คุณสามารถระบุพฤติกรรมได้ถ้ามันมีระยะห่างเท่ากันระหว่างความเป็นไปได้สองอย่างเช่นการปัดเศษเพื่อให้ตัวเลขสุดท้ายเป็นเลขคู่ (" Round(2.5,MidpointRounding.ToEven)" กลายเป็น 2) หรือเพื่อให้ห่างจากศูนย์ (" Round(2.5,MidpointRounding.AwayFromZero)" กลายเป็น 3)

แผนภาพและตารางต่อไปนี้อาจช่วยได้:

-3        -2        -1         0         1         2         3
 +--|------+---------+----|----+--|------+----|----+-------|-+
    a                     b       c           d            e

                       a=-2.7  b=-0.5  c=0.3  d=1.5  e=2.8
                       ======  ======  =====  =====  =====
Floor                    -3      -1      0      1      2
Ceiling                  -2       0      1      2      3
Truncate                 -2       0      0      1      2
Round (ToEven)           -3       0      0      2      3
Round (AwayFromZero)     -3      -1      0      2      3

โปรดทราบว่าRoundมีประสิทธิภาพมากกว่าที่คิดเพียงเพราะมันสามารถปัดเศษทศนิยมตามจำนวนที่กำหนดได้ ส่วนอื่น ๆ ทั้งหมดจะปัดเป็นศูนย์ทศนิยมเสมอ ตัวอย่างเช่น:

n = 3.145;
a = System.Math.Round (n, 2, MidpointRounding.ToEven);       // 3.14
b = System.Math.Round (n, 2, MidpointRounding.AwayFromZero); // 3.15

ด้วยฟังก์ชั่นอื่น ๆ คุณจะต้องใช้เทคนิคการทวีคูณ / หารเพื่อให้ได้เอฟเฟกต์เดียวกัน:

c = System.Math.Truncate (n * 100) / 100;                    // 3.14
d = System.Math.Ceiling (n * 100) / 100;                     // 3.15

7
สันติภาพฉันคิดว่าคุณมีข้อผิดพลาดด้วย: Round (AwayFromZero) -3 -2 1 2 3 Math.Round (-1.2, MidpointRounding.AwayFromZero) == -1 Math.Round (0.3, MidpointRounding.AwayFromZero) == 0.0 ฯลฯ ..
dtroy

1
ขอบคุณ @dtroy ฉันไม่เคยต้องการใช้โหมดนั้นและในขณะที่ฉันบันทึกไว้อย่างถูกต้องหากข้อความฉันมีตัวอย่างผิดทั้งหมด หวังว่าคงที่แล้ว
paxdiablo

ขออภัยที่แสดงความคิดเห็นในคำถามเก่า แต่ฉันต้องถาม: คุณจะปัด "ToEven" เป็นทศนิยมสองตำแหน่งได้อย่างไร แปลกอย่างแน่นอนและแม้กระทั่งใช้เฉพาะกับจำนวนเต็ม?
Richiban

4
@Richiban คิดว่าevenเป็นทรัพย์สินของสุดท้ายบาทในจำนวนที่โค้งมนที่ไม่ได้เป็นความหมายทั้งจำนวนจะต้องมีหลายของทั้งสอง โดยวิธีการขอโทษมันใช้เวลานานมากที่จะได้รับกลับมาให้คุณหวังว่าคุณไม่ได้เพียงแค่นั่งรอบรอการตอบสนองของฉัน :-)
paxdiablo

62

Math.Floor() ปัดเศษไปทางอนันต์ลบ

Math.Truncate ปัดขึ้นหรือลงไปทางศูนย์

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

Math.Floor(-3.4)     = -4
Math.Truncate(-3.4)  = -3

ในขณะที่

Math.Floor(3.4)     = 3
Math.Truncate(3.4)  = 3

2
คำอธิบายที่ดีและเรียบง่ายพร้อมตัวอย่างสั้น ๆ ควรทำเครื่องหมายเป็นคำตอบสำหรับคำถามนี้
nivs1978

44

ตัวอย่างบางส่วน:

Round(1.5) = 2
Round(2.5) = 2
Round(1.5, MidpointRounding.AwayFromZero) = 2
Round(2.5, MidpointRounding.AwayFromZero) = 3
Round(1.55, 1) = 1.6
Round(1.65, 1) = 1.6
Round(1.55, 1, MidpointRounding.AwayFromZero) = 1.6
Round(1.65, 1, MidpointRounding.AwayFromZero) = 1.7

Truncate(2.10) = 2
Truncate(2.00) = 2
Truncate(1.90) = 1
Truncate(1.80) = 1

29

Math.floorsliiiide ไปทางซ้าย ...
Math.ceilsliiiide ไปทางขวา ...
Math.truncatecriiiiss crooooss (พื้น / เพดานเสมอไปที่ 0)
Math.roundcha cha, เรียบจริง ๆ ... (ไปด้านที่ใกล้ที่สุด)

ไปทำงานกันเถอะ! (⌐□□ _)

ไปทางซ้าย ... Math.floor
นำมันกลับไปตอนนี้คุณทุก--
คน ...-=2

ทุกคนตบมือของคุณ✋✋

วิธีการที่ต่ำที่คุณสามารถไป? ลงไปต่ำได้ไหม ไปจนถึงทางfloor?

if (this == "wrong")
    return "i don't wanna be right";

Math.truncate(x)int(x)นอกจากนี้ยังเป็นเช่นเดียวกับ
โดยการลบเศษส่วนบวกหรือลบคุณจะมุ่งไปที่ 0


ฮ่าฮ่าฮ่าเรียบเรียงที่ดี
แดเนียลพูดว่า Reinstate Monica

26

พวกมันทำงานเทียบเท่ากับจำนวนบวก ความแตกต่างคือวิธีจัดการกับจำนวนลบ

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

Math.Floor(2.5) = 2
Math.Truncate(2.5) = 2

Math.Floor(-2.5) = -3
Math.Truncate(-2.5) = -2

ลิงค์ MSDN: - Math.Floor Method - Math.Truncate Method

ป.ล. ระวังคณิตศาสตร์เสมอมันอาจไม่ใช่สิ่งที่คุณคาดหวัง

ในการรับผลการปัดเศษ "มาตรฐาน" ให้ใช้:

float myFloat = 4.5;
Console.WriteLine( Math.Round(myFloat) ); // writes 4
Console.WriteLine( Math.Round(myFloat, 0, MidpointRounding.AwayFromZero) ) //writes 5
Console.WriteLine( myFloat.ToString("F0") ); // writes 5

24

ลองนี่ตัวอย่าง:

Math.Floor () vs Math.Truncate ()

Math.Floor(2.56) = 2
Math.Floor(3.22) = 3
Math.Floor(-2.56) = -3
Math.Floor(-3.26) = -4

Math.Truncate(2.56) = 2
Math.Truncate(2.00) = 2
Math.Truncate(1.20) = 1
Math.Truncate(-3.26) = -3
Math.Truncate(-3.96) = -3

นอกจากนี้Math.Round ()

   Math.Round(1.6) = 2
   Math.Round(-8.56) = -9
   Math.Round(8.16) = 8
   Math.Round(8.50) = 8
   Math.Round(8.51) = 9

math.floor()

ส่งคืนจำนวนเต็มที่มากที่สุดน้อยกว่าหรือเท่ากับจำนวนที่ระบุ MSDN system.math.floor

math.truncate()

คำนวณส่วนหนึ่งของตัวเลข ระบบ MSDN ตัดทอน



15

Math.Floor(): ส่งคืนจำนวนเต็มที่ใหญ่ที่สุดน้อยกว่าหรือเท่ากับจำนวนจุดลอยตัวความแม่นยำสองเท่าที่ระบุ

Math.Round(): ปัดเศษค่าเป็นจำนวนเต็มที่ใกล้ที่สุดหรือตามจำนวนที่ระบุของตัวเลขเศษส่วน


1
สหกรณ์ถามเกี่ยวกับความแตกต่างระหว่างFloor()และTruncate()ไม่และFloor() Round()
Robert Columbia

5

Math.floor()จะปัดเศษลงเสมอเช่น. จะคืนค่าเป็น LESSER จำนวนเต็ม ในขณะที่round()จะส่งกลับจำนวนเต็มที่ใกล้เคียงที่สุด

Math.Floor ()

ส่งคืนจำนวนเต็มที่มากที่สุดน้อยกว่าหรือเท่ากับจำนวนที่ระบุ

Math.Truncate ()

คำนวณส่วนหนึ่งของตัวเลข


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.