ปัดเศษทศนิยมสองตำแหน่งใน C # หรือไม่


258

ฉันต้องการปัดเศษสองค่าเป็นทศนิยมสองตำแหน่งใน c # ฉันจะทำอย่างไร

double inputValue = 48.485;

หลังจากรอบขึ้น

inputValue = 48.49;

ที่เกี่ยวข้อง: c # - ฉันจะปัดเศษทศนิยมเป็นทศนิยม 2 ตำแหน่งได้อย่างไร (สำหรับผลลัพธ์บนหน้า)


รับทราบว่าคุณไม่สามารถแทนค่าจุดลอยตัวทั้งหมดโดยใช้ double และสิ่งนี้สามารถเดินทางไปหาคุณได้เมื่อปัดเศษ
เลียม

คำตอบ:


479

งานนี้:

inputValue = Math.Round(inputValue, 2);

วิธีแก้ปัญหาเพื่อตัดทอนลอย: float myTruncFloat = float.Parse (Math.Round (myFloat, 2) .ToString ());
Piero Alberto

1
ถ้าค่าเป็น 48.0000 จะไม่ส่งผล 48.00 double inputValue = 48.00; inputValue = Math.Round (inputValue, 2); จะส่งผล 48 เท่านั้น มีแว็กเนอร์ไหม?
user1926138

100
Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)

4
นี่คือสิ่งที่ควรใช้ การดำเนินการส่วนใหญ่ในธนาคารและอื่น ๆ ทำได้โดยใช้วิธีนี้ (MidpointRounding.AwayFromZero)
MadBoy

41
การแนะนำให้ธนาคารใช้คู่เป็นคู่ที่น่ากลัวอย่าใช้ค่าประมาณสำหรับสกุลเงิน
Raggi

6
@raggi ฉันกลัวบางคน (ธนาคาร) ทำ ... ที่จะอธิบายมากสิ่ง
SPARK

4
ใช่ฉันเชื่อว่านี่คือสิ่งที่ภาพยนตร์เรื่อง 'Office Space' สร้างขึ้นหลังจากปิดเศษส่วนของเซนต์ที่ไม่มีใครสังเกตเห็น จุดดีที่ควรระวังเมื่อใช้การปัดเศษโดยพลการ
atconway

1
และเป็นส่วนหนึ่งของเนื้อเรื่องของภาพยนตร์ซูเปอร์แมนดั้งเดิมฉบับหนึ่งเมื่อนานมาแล้ว
James Westgate

25

คุณควรใช้

inputvalue=Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)

Math.Round

Math.Round ปัดเศษทศนิยมที่มีความแม่นยำสองเท่าเป็นตัวเลขเศษส่วนที่ระบุ

MidpointRounding

ระบุวิธีการปัดเศษทางคณิตศาสตร์ควรประมวลผลหมายเลขที่อยู่กึ่งกลางระหว่างตัวเลขสองตัว

โดยทั่วไปฟังก์ชั่นด้านบนจะใช้ค่าอินพุตของคุณและปัดเศษเป็นทศนิยม 2 ตำแหน่ง (หรือจำนวนใดก็ตามที่คุณระบุ) ด้วยMidpointRounding.AwayFromZeroเป็นจำนวนมากเมื่ออยู่กึ่งกลางระหว่างสองคนอื่น ๆ ก็เป็นโค้งมนไปยังหมายเลขที่ใกล้ที่สุดที่อยู่ห่างออกไปจากศูนย์ นอกจากนี้ยังมีตัวเลือกอื่นที่คุณสามารถใช้รอบนั้นไปยังเลขคู่ที่ใกล้ที่สุด


25

อีกวิธีง่าย ๆ คือการใช้ ToString ด้วยพารามิเตอร์ ตัวอย่าง:

float d = 54.9700F;    
string s = d.ToString("N2");
Console.WriteLine(s);

ผลลัพธ์:

54.97

19

ใช้Math.Round

value = Math.Round(48.485, 2);

เอาชนะฉันได้ (แม้ว่าฉันจะเพิ่มเซมิโคลอนที่นั่นเช่นกัน))
Reed Copsey

1
อย่างไรก็ตามโปรดระวังด้วย MidpointRounding: "ถ้าค่าของตัวเลขตัวแรกที่อยู่ทางด้านขวาของตำแหน่งทศนิยมหลักคือ 5 ตัวเลขในตำแหน่งหลักจะถูกปัดขึ้นถ้ามันเป็นเลขคี่หรือไม่เปลี่ยนหากเป็นเลขคู่"
Matthias

8

คุณสามารถลองจากด้านล่างมีหลายวิธีสำหรับการนี้

1. 
 value=Math.Round(123.4567, 2, MidpointRounding.AwayFromZero) //"123.46"
2.
 inputvalue=Math.Round(123.4567, 2)  //"123.46"
3. 
 String.Format("{0:0.00}", 123.4567);      // "123.46"
4. 
string.Format("{0:F2}", 123.456789);     //123.46
string.Format("{0:F3}", 123.456789);     //123.457
string.Format("{0:F4}", 123.456789);     //123.4568

ฉันใช้ตัวเลือกที่สี่ การเขียน F6 ใช้งานได้ดีกว่าการเขียน 6 ศูนย์ ;-)
Maurice Klimek

2

ใช้สตริงที่สอดแทรกซึ่งจะสร้างสตริงที่ปัดขึ้น:

var strlen = 6;
$"{48.485:F2}"

เอาท์พุต

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