ฉันไม่อยากจะเชื่อเลยว่าฉันไม่สามารถหาวิธีการทำเช่นนี้ได้ แต่ฉันจะพูดอะไรได้ ฉันไม่สามารถทำมันได้ ฉันแค่พยายามเขียนตัวเลขในรูปแบบ มาตรฐาน (ตามที่ใช้ในสัญกรณ์วิทยาศาสตร์)
ฉันได้อ่านตัวอย่างมากมายเกี่ยวกับวิธีการบรรลุเป้าหมายนี้โดยใช้ "setprecision(...)" และ "คงที่" และสิ่งต่าง ๆ แต่ปัญหาคือไม่ทราบความแม่นยำของตัวเลขในเวลารวบรวมและป้อนการประมาณค่าแบบอนุรักษ์นิยมด้วย 'setprecision (...)' ทิ้งศูนย์ที่ไม่จำเป็นมากมายเกี่ยวกับสถานที่นี้
นี่คือตัวอย่างสิ่งที่ฉันตามหา:
let: tau = 6.2831
tau * 0.000001 -> 0.0000062831
tau * 0.001 -> 0.0062831
tau -> 6.2831
tau * 1000 -> 6283.1
tau * 1000000 -> 6283100
ในขณะนี้ฉันได้รับ:
tau * 0.000001 -> 6.2831e-006
tau * 0.001 -> 0.0062831
tau -> 6.2831
tau * 1000 -> 6283.1
tau * 1000000 -> 6.2831e+006
สิ่งเดียวที่ฉันทำได้คือแยกเลขชี้กำลังของค่าสองเท่าออก ถ้าเลขชี้กำลังเป็นบวก 'แก้ไข' ความแม่นยำให้เป็นศูนย์ ไม่อย่างนั้นก็ตั้งค่าความแม่นยำเป็น '-1 * exp'; แต่นี่ดูเหมือนเป็นวิธีที่ซับซ้อนอย่างยิ่งในการ 'ปิด' สัญกรณ์ทางวิทยาศาสตร์ มีใครรู้วิธีที่ดีกว่านี้บ้างไหม?
tau * 1e-80
นั่นอาจเป็นสาเหตุที่ไม่มีวิธีแก้ปัญหาง่ายๆ — BTW เกิดอะไรขึ้นกับtau * 1000000 -> 6.2831e-006
? - person leftaroundabout   schedule 19.03.2012float tau = 6.2831
ค่าจริงจะเป็น6.283100128173828125
ตัวจัดรูปแบบไม่มีทางรู้ได้ว่าตัวเลข 14 หลักสุดท้ายเกิดจากข้อผิดพลาดในการปัดเศษ - person Mike Seymour   schedule 19.03.20126.2831
เป๊ะๆ ได้ แต่ก็ยังเท่ากับ6.28310
ไม่มีสิ่งที่เรียกว่าศูนย์ที่ไม่จำเป็นในการแสดงขนาดคงที่ หากคุณต้องการแยกความแตกต่างระหว่าง6.2831
และ6.28310
คุณจะต้องใช้std::string
- person MSalters   schedule 19.03.2012