Python เพิ่มทศนิยมให้กับค่าลองจิจูด

ฉันมีค่าละติจูดลองจิจูด NAD83 หลายพันรายการโดยค่าลองจิจูดเริ่มต้นด้วยค่าลบเช่น -747559718

พิกัดเฉพาะนี้ทศนิยมจะต้องอยู่หลัง 4 เพื่อที่จะใช้อย่างถูกต้องในแอปพลิเคชันการทำแผนที่ที่ฉันใช้ มันควรจะเป็น -74.7559718

มีหลายครั้งที่ค่าลองจิจูดจะเป็น -123092886 โดยที่ทศนิยมควรอยู่หลัง 3 ควรเป็น -123.092886

ฉันกำลังอ่านพิกัดเหล่านี้ผ่านไฟล์ JSON ด้วยเหตุผลบางอย่างจึงไม่มีทศนิยม ฉันกำลังมองหาวิธีแก้ปัญหาหลามบริสุทธิ์เพื่อแทรกทศนิยมในตำแหน่งที่ถูกต้อง

ตัวเลขจะมีความยาว 9 หรือ 10 หลัก

ฉันรู้ว่าฉันสามารถทำอะไรบางอย่างได้เมื่อฉันมีค่าลองจิจูดในตัวแปรแล้ว

 s = longitude
 s[:3] + '.' + s[3:]

person ziggy    schedule 17.11.2016    source แหล่งที่มา
comment
ถ้าไม่ใช่กรณีเลข 9 หลักก็คูณด้วย 0.00001 ได้เลย   -  person taylor swift    schedule 17.11.2016
comment
และเหตุใด -123.092886 จึงมีทศนิยมหกตำแหน่ง แต่ -74.02373 มีเพียงห้าตำแหน่งเท่านั้น   -  person taylor swift    schedule 17.11.2016
comment
คุณจะแยกความแตกต่าง -3.000000 และ -30.00000 ได้อย่างไร?   -  person spectras    schedule 17.11.2016
comment
@taylorswift นั่นคือวิธีกำหนดพิกัดในไฟล์ บางครั้งก็มีทศนิยม 5 หรือ 6 ตำแหน่ง   -  person ziggy    schedule 17.11.2016
comment
รับรองได้เลยว่าพิกัดจะไม่มีเลข 8 หลัก ต้องเป็น 7 หรือ 9 เสมอไป?   -  person taylor swift    schedule 17.11.2016
comment
@taylorswift ให้ฉันตรวจสอบความยาวอีกครั้ง   -  person ziggy    schedule 17.11.2016
comment
@taylorswift ตัวเลขจะเป็น 9 หลักเสมอ ฉันกำลังอัปเดตคำถาม พิกัดแรกที่ฉันใส่ ฉันปล่อยตัวเลข 2 หลักสุดท้ายออกไป ฉันไม่คิดว่ามันจะสำคัญ   -  person ziggy    schedule 17.11.2016
comment
แปลกมากที่ตัวเลขจะมี 9 หลักเสมอ ฉันหมายถึงว่าพิกัดที่ต่ำกว่า 100 จะมีความแม่นยำมากกว่าพิกัด ›= 100 คุณแน่ใจเกี่ยวกับเรื่องนี้หรือไม่ นอกจากนี้ ไม่มีทางบอกได้ว่า -123092886 เป็น -123.092886 หรือ -12.3092886   -  person lucasnadalutti    schedule 17.11.2016
comment
มีหลายพันตัว ส่วนใหญ่เป็น 9 ตัว แต่เท่าที่ผมดูก็เห็นบางอันมี 10 หลัก   -  person ziggy    schedule 17.11.2016
comment
@ziggy บางทีอันที่มี 10 หลักอาจเป็น >= 100 ซึ่งหมายความว่าค่าทั้งหมดมีทศนิยม 7 ตำแหน่ง หากค่าเหล่านี้มีจำนวนทศนิยมคงที่ ฉันไม่คิดว่านี่เป็นปัญหาที่กำหนดขึ้นเลย...   -  person lucasnadalutti    schedule 17.11.2016
comment
@lucasnadalutti ฉันอาจคิดออกแล้ว ฉันจะโพสต์คำตอบหากโซลูชันของฉันใช้งานได้   -  person ziggy    schedule 17.11.2016
comment
ถ้าบางอันเป็น 9 และบางอันเป็น 10 แสดงว่า int(s) / 1e7 อาจใช้ได้ หรือบางทีอาจเป็น s[:-7] + '.' + s[-7:]   -  person Robᵩ    schedule 17.11.2016


คำตอบ (1)


ฉันเข้าใจปัญหาของฉันแล้ว: พิกัด lat long ทั้งหมดของฉันอยู่ในสหรัฐอเมริกาในขณะเดียวกัน และฉันรู้ว่าจากการเป็นนักวิเคราะห์เชิงพื้นที่ว่าค่าลองจิจูดใดๆ ในการฉายภาพ NAD83 ที่อยู่ในสหรัฐอเมริกาในขณะเดียวกันและเริ่มต้นด้วยเลข 1 หลัก ก็จะมี ตำแหน่งทศนิยมหลังหลักที่ 3 และค่าลองจิจูดที่เหลือในสหรัฐอเมริกาจะเริ่มต้นด้วย 7,8 หรือ 9 และค่าเหล่านั้นจะมีทศนิยมอยู่หลังหลักที่สองเสมอ ฉันไม่แน่ใจว่าโซลูชันนี้จะใช้ได้กับส่วนอื่นๆ ของโลกหรือไม่ แต่ทำให้เสร็จที่นี่

นี่คือวิธีแก้ปัญหาของฉันโดยที่ z เป็นตัวแปรที่มีค่าลองจิจูด:

if str(z)[1:2] == '1':
    longitude = str(z)[0:4]+'.'+str(z)[4::]
else:
    longitude = str(z)[0:3]+'.'+str(z)[3::]

อัปเดต

คำตอบที่ดีกว่า:

longitude = z * 0.0000001

สิ่งนี้ใช้ได้กับค่าละติจูดด้วย

person ziggy    schedule 17.11.2016
comment
มันดูผิดมากจนเกือบจะรับประกันได้ว่านั่นไม่ใช่วิธีการสร้างคุณค่าเหล่านั้น - person spectras; 18.11.2016
comment
ทำไมมันดูผิด? มันได้ผล latitudeE7 : 402212350, longitudeE7 : -747559718 ตรงจากไฟล์ json - person ziggy; 18.11.2016
comment
มันดูผิดเพราะไม่มีนักพัฒนาคนใดที่จะสร้างตัวเลขโดยการรันมันผ่านฟังก์ชันสตริงเช่นนี้ ดังนั้นฉันแน่ใจว่ารูปแบบตัวเลขที่โซลูชันแรกของคุณสันนิษฐานนั้นผูกมัดกับค่าบางค่า โซลูชันที่อัปเดตของคุณดูดีขึ้น เหมือนในสิ่งที่นักพัฒนาสามารถเขียนได้จริง นอกจากนี้ยังง่ายกว่ามากและนักพัฒนาก็มีแนวโน้มที่จะใช้แนวทางที่ง่ายที่สุดที่ตอบสนองความต้องการ ดังนั้นหากโซลูชันของคุณซับซ้อนกว่าปัญหาที่คุณกำลังแก้ไขอย่างมาก คุณมักจะทำผิด เปรียบเทียบความซับซ้อนและความสามารถในการอ่านของทั้งสองโซลูชันของคุณ ;) - person spectras; 18.11.2016