Python menambahkan desimal ke nilai garis bujur

Saya memiliki ribuan nilai bujur lintang NAD83 yang nilai bujurnya dimulai dengan negatif seperti -747559718

koordinat khusus ini, desimalnya harus berada setelah 4 agar dapat digunakan dengan benar dalam aplikasi pemetaan yang saya gunakan. seharusnya -74.7559718

Ada kalanya nilai garis bujur adalah -123092886 dimana desimalnya harusnya setelah angka 3. Seharusnya -123.092886

Saya membaca koordinat ini melalui file JSON, untuk beberapa alasan tidak ada desimal. Saya mencari solusi python murni untuk memasukkan desimal di tempat yang benar.

Jumlahnya akan terdiri dari 9 atau 10 digit

Saya tahu saya bisa melakukan sesuatu seperti setelah saya memiliki nilai garis bujur dalam sebuah variabel

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

person ziggy    schedule 17.11.2016    source sumber
comment
kalau bukan karena huruf 9 digit, kalikan saja dengan 0,00001   -  person taylor swift    schedule 17.11.2016
comment
dan mengapa -123.092886 memiliki enam tempat desimal tetapi -74.02373 hanya lima?   -  person taylor swift    schedule 17.11.2016
comment
Bagaimana cara membedakan -3.000000 dan -30.00000?   -  person spectras    schedule 17.11.2016
comment
@taylorswift begitulah koordinat yang diberikan dalam file. terkadang memiliki 5 atau 6 tempat desimal   -  person ziggy    schedule 17.11.2016
comment
apakah dijamin koordinatnya tidak akan pernah berisi 8 digit, selalu 7 atau 9?   -  person taylor swift    schedule 17.11.2016
comment
@taylorswift izinkan saya memeriksa ulang panjangnya   -  person ziggy    schedule 17.11.2016
comment
@taylorswift nomornya akan selalu 9 digit. saya memperbarui pertanyaan koordinat pertama yang saya masukkan saya meninggalkan 2 digit terakhir menurut saya itu tidak masalah   -  person ziggy    schedule 17.11.2016
comment
Sangat aneh bahwa angka-angka tersebut selalu memiliki 9 digit. Maksud saya, koordinat yang lebih rendah dari 100 memiliki presisi lebih tinggi dibandingkan koordinat ›= 100. Apakah Anda yakin mengenai hal ini? Selain itu, tidak ada cara untuk mengetahui apakah -123092886 adalah -123.092886 atau -12.3092886   -  person lucasnadalutti    schedule 17.11.2016
comment
ada ribuan, sebagian besar berjumlah 9 tetapi ketika saya melihat-lihat, saya melihat beberapa yang memiliki 10 digit   -  person ziggy    schedule 17.11.2016
comment
@ziggy Mungkin yang 10 digitnya ›= 100, artinya semua nilai punya 7 desimal? Jika semua nilai ini tidak memiliki jumlah desimal yang tetap, menurut saya ini bukan masalah deterministik sama sekali...   -  person lucasnadalutti    schedule 17.11.2016
comment
@lucasnadalutti saya mungkin sudah menemukannya, saya akan memposting jawaban jika solusi saya berhasil   -  person ziggy    schedule 17.11.2016
comment
Jika ada yang 9 dan ada yang 10, maka int(s) / 1e7 mungkin berhasil, atau mungkin s[:-7] + '.' + s[-7:]   -  person Robᵩ    schedule 17.11.2016


Jawaban (1)


Saya telah menemukan masalah saya: semua koordinat bujur lintang saya berada di AS pada masa yang sama dan saya tahu, dari seorang analis geospasial bahwa setiap nilai garis bujur dalam proyeksi NAD83 yang berada di AS pada masa yang sama dan dimulai dengan angka 1, maka akan memiliki tempat desimal setelah angka ke-3. dan nilai garis bujur lainnya di AS dimulai dengan 7,8 atau 9 dan nilai tersebut selalu memiliki desimal setelah digit kedua. Saya tidak yakin apakah solusi ini akan berhasil di seluruh dunia, namun solusi ini dapat diterapkan di sini

inilah solusi saya dengan z menjadi variabel yang berisi nilai garis bujur:

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

PEMBARUAN

jawaban yang lebih baik:

longitude = z * 0.0000001

ini juga berfungsi untuk nilai garis lintang

person ziggy    schedule 17.11.2016
comment
Kelihatannya sangat salah sehingga saya hampir dapat menjamin bahwa nilai-nilai tersebut tidak dibangun dengan cara seperti itu. - person spectras; 18.11.2016
comment
kenapa kelihatannya salah? itu berhasil. garis lintangE7 : 402212350, garis bujurE7 : -747559718 langsung dari file json - person ziggy; 18.11.2016
comment
Tampaknya salah karena tidak ada pengembang yang akan membuat angka dengan menjalankannya melalui fungsi string seperti ini. Jadi saya yakin format angka yang diasumsikan oleh solusi pertama Anda pasti akan merusak beberapa nilai. Solusi Anda yang telah diperbarui terlihat lebih baik, seperti pada sesuatu yang sebenarnya bisa ditulis oleh pengembang. Ini juga jauh lebih sederhana dan pengembang cenderung menggunakan pendekatan paling sederhana yang memenuhi persyaratan, jadi jika solusi Anda jauh lebih kompleks daripada masalah yang Anda selesaikan, biasanya Anda salah melakukannya. Bandingkan kompleksitas dan keterbacaan kedua solusi Anda;) - person spectras; 18.11.2016