希望一個簡單的,我有一個數字,說1234567.890這個數字可以是任何東西,但不會是這個長度。
我如何“截斷”前 3 個數字使其變成4567.890?
這可以是任何數字,因此減去 123000 將不起作用。
編輯
我正在使用 UTM 坐標中的地圖資料(但這不重要0
例子
x = 580992.528
y = 4275267.719
對于 x 我想要992.528
對于 y,我想要“267.719”
注意 y 在小數點左邊有一個額外的數字,所以 4 需要洗掉
uj5u.com熱心網友回復:
您可以為此使用切片:
x = 1234567.890
# This is still a float
x = float(str(x)[3:])
print(x)
輸出:
4567.89
As[3:]獲取開始處的索引3并繼續到字串的末尾
uj5u.com熱心網友回復:
如果你不使用字串,你會在 Python 中遇到一些浮點問題。
演示:
n = 1234567.890
i = 0
while True:
m = int(n // 10**i)
if m < 1000:
break
i = 1
r = n % 10**i
輸出:
>>> r
4567.889999999898
>>> round(r, 3)
4567.89
與十進制模塊相同Decimal:
from decimal import Decimal
n = 1234567.890
n = Decimal(str(n))
i = 0
while True:
m = int(n // 10**i)
if m < 1000:
break
i = 1
r = n % 10**i
輸出:
>>> r
Decimal('4567.89')
>>> float(r)
4567.89
uj5u.com熱心網友回復:
這種方法只是實作了您的想法。
int_len是我們保留的整數部分的長度sub是我們將減去原始浮點數的舍入值
代碼
這是實作您的想法的代碼。
import math
def trim(n, digits):
int_len = len(str(int(n))) - digits # length of 4567
sub = math.floor(n / 10 **int_len) * 10**int_len
print(n - sub)
但正如凱利邦迪所指出的,您可以使用模運算來避免找到減數的復雜程序。
def trim(n, digits):
int_len = len(str(int(n))) - digits # length of 4567
print(n % 10**int_len)
輸出
浮點的東西有點被詛咒,你可能想把Corralien 的答案作為替代方案。
>>> n = 1234567.890
>>> trim(n, 3)
4567.889999999898
uj5u.com熱心網友回復:
def get_slice(number, split_n):
return number - (number // 10**split_n) * 10**split_n
uj5u.com熱心網友回復:
將其轉換為字串,然后獲取包括第四個字符和之后的數字,并將其轉換為浮點數并回傳。
def remove_first_3_digits(num):
strn = str(num) #Convert to string
chars = strn[3:] # Get digits needed
return float(chars) #Return string as float
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/441340.html
標籤:Python
