2011-06-20 34 views
5

This question yêu cầu cách loại bỏ ký pháp khoa học trong python.Làm thế nào để tránh in ký hiệu khoa học trong python mà không cần thêm chữ số phụ?

Tôi có một chuỗi số để hiển thị - các quyền hạn nhỏ là 10 - và tôi muốn hiển thị chúng mà không có dấu 0. I E. 0,1, 0,01, v.v. 000001

Nếu tôi làm "%s" % 10 ** -6 Tôi nhận được '1e-06'. Nếu tôi sử dụng "%f" % 10 ** -6 tôi nhận được '0.000001' đó là những gì tôi muốn.

Tuy nhiên, "%f" % 10 ** -3 sản lượng '0.001000' vi phạm ràng buộc "không có dấu ngã".

Nó không khó để bạo lực một cách xung quanh này (thay thế regex hoặc một cái gì đó), nhưng tôi tự hỏi nếu có một số ma thuật chuỗi định dạng tôi đang mất tích.

Trả lời

7

Dường như với tôi một chút hacky, nhưng bạn có thể sử dụng str.rstrip("0") để thoát khỏi số không trailing:

>>> "{:f}".format(10**-6).rstrip("0") 
'0.000001' 
>>> "{:f}".format(10**-3).rstrip("0") 
'0.001' 

Edit: Như đã nói trong ý kiến, có một cách tốt hơn cho việc này:

>>> format(1e-6, 'f').rstrip('0') 
'0.000001' 
>>> format(1e-3, 'f').rstrip('0') 
'0.001' 
+0

Đó là những gì OP được gọi là * "sức mạnh vũ phu theo cách này" *, vì vậy nó không phải là câu trả lời thực (-1). Tuy nhiên, tôi cũng sẽ làm theo cách này (+1). –

+0

+1. Nó không phải là hacky cả. Có thể sử dụng hàm 'format()' là một trình dọn dẹp nhỏ hơn: 'format (1e-6, 'f'). Rstrip ('0')'. –

+0

@Oben Sonne, nhưng nó tốt hơn nhiều so với sử dụng regex. @ Ferdinand Beyer, cảm ơn, tôi không biết rằng, sửa đổi câu trả lời. – utdemir

2

Đơn giản rstrip("0") không xử lý tốt và chắc chắn các giá trị khác tốt, cần để lại một số không sau dấu thập phân - 0.0 thay vì 0.:

def format_float(value, precision=-1): 
    if precision < 0: 
     f = "%f" % value 
    else: 
     f = "%.*f" % (precision, value) 

    p = f.partition(".") 

    s = "".join((p[0], p[1], p[2][0], p[2][1:].rstrip("0"))) 

    return s 

print(format_float(3e-10)) 
print(format_float(3e-10, 20)) 
print(format_float(1.5e-6)) 
print(format_float(1.5e+6)) 
Các vấn đề liên quan