在下面的示例中,我想格式化为1位小数,但是python似乎想要将数字四舍五入,有没有办法让它不能数字化?
>>> '{:.1%}'.format(0.9995)
'100.0%'
>>> '{:.2%}'.format(0.9995)
'99.95%'
谢谢! :)
答案 0 :(得分:14)
如果要向下舍入始终(而不是舍入到最接近的精度),请使用math.floor()
function明确地执行此操作:
from math import floor
def floored_percentage(val, digits):
val *= 10 ** (digits + 2)
return '{1:.{0}f}%'.format(digits, floor(val) / 10 ** digits)
print floored_percentage(0.995, 1)
演示:
>>> from math import floor
>>> def floored_percentage(val, digits):
... val *= 10 ** (digits + 2)
... return '{1:.{0}f}%'.format(digits, floor(val) / 10 ** digits)
...
>>> floored_percentage(0.995, 1)
'99.5%'
>>> floored_percentage(0.995, 2)
'99.50%'
>>> floored_percentage(0.99987, 2)
'99.98%'
答案 1 :(得分:1)
这样的事情:
def my_format(num, x):
return str(num*100)[:4 + (x-1)] + '%'
>>> my_format(.9995, 1)
'99.9%'
>>> my_format(.9995, 2)
'99.95%'
>>> my_format(.9999, 1)
'99.9%'
>>> my_format(0.99987, 2)
'99.98%'
答案 2 :(得分:0)
有两种方法,也许最简单的方法是
x = str(10. * 0.9995).split('.')
my_string = '%s.%s%%' % (x[0], x[1][:2])
这将确保您始终将小数点放在正确的位置(对于1.0000
或0.001
等边缘情况
答案 3 :(得分:0)
在Python 3.6+中,您可以使用格式化的字符串文字,也称为f字符串。它们比str.format
更有效。此外,您可以使用更有效的楼层划分代替math.floor
。我认为语法也更具可读性。
下面提供了两种方法进行比较。
from math import floor
from random import random
def floored_percentage(val, digits):
val *= 10 ** (digits + 2)
return '{1:.{0}f}%'.format(digits, floor(val) / 10 ** digits)
def floored_percentage_jpp(val, digits):
val *= 10 ** (digits + 2)
return f'{val // digits / 10 ** digits:.{digits}f}%'
values = [random() for _ in range(10000)]
%timeit [floored_percentage(x, 1) for x in values] # 35.7 ms per loop
%timeit [floored_percentage_jpp(x, 1) for x in values] # 28.1 ms per loop
答案 4 :(得分:0)
在使用更现代的python 3.6+ f字符串格式时扩展可接受的答案
<section class="wrapper check-us-out">
<div class="text-container">
<h1 class="heading">
<u>
POZNAJ NAS
</u>
</h1>
<p>
IMET to hurtownia narzędziowo-instalacyjna, dzięki
której błyskawicznie znajdziesz to, czego
potrzebujesz
</p>
</div>
<div class="wrapper items">
<div class="column" id="first-column">
<a href="{{ route('b2b') }}" class="item" aria-label="Platforma B2B">
<div class="icon">
<object
data="{{ asset('imgs/svg/b2b.svg') }}"
type="image/svg+xml"
>
<img
src="{{ asset('imgs/svg/b2b.svg') }}"
alt="Platforma B2B"
/>
</object>
</div>
<div class="text-container">
<h3>PLATFOMRA B2B</h3>
<p>
Możliwość dokonywania zakupów za pomocą
nowoczesnej platformy IMET B2B
</p>
</div>
</a>
</div>
<div class="column">
<a href="{{ route('availability') }}" class="item" aria-label="Dostępność">
<div class="icon">
<object
data="{{ asset('imgs/svg/availability.svg') }}"
type="image/svg+xml"
>
<img
src="{{ asset('imgs/svg/availability.svg') }}"
alt="Dostępność"
/>
</object>
</div>
<div class="text-container">
<h3>DOSTĘPNOŚĆ</h3>
<p>
Wysoka dostępność towarów oraz własne
centrum logistyczne
</p>
</div>
</a>
<a href="{{ route('advicing') }}" class="item" aria-label="Doradztwo">
<div class="icon">
<object
data="{{ asset('imgs/svg/advicing.svg') }}"
type="image/svg+xml"
>
<img
src="{{ asset('imgs/svg/advicing.svg') }}"
alt="Doradztwo"
/>
</object>
</div>
<div class="text-container">
<h3>DORADZTWO</h3>
<p>
Profesjonalna pomoc i wsparcie
merytoryczne na każdym etapie
współpracy
</p>
</div>
</a>
</div>
<div class="column">
<a href="{{ route('distributor') }}" class="item" aria-label="Dystrybutor">
<div class="icon">
<object
data="{{ asset('imgs/svg/distributor.svg') }}"
type="image/svg+xml"
>
<img
src="{{ asset('imgs/svg/distributor.svg') }}"
alt="Dystrybutor"
/>
</object>
</div>
<div class="text-container">
<h3>DYSTRYBUTOR</h3>
<p>
Autoryzowany punkt handlowy ponad 100
marek
</p>
</div>
</a>
<a href="{{ route('special-orders') }}" class="item" aria-label="Zamówienia specjalne">
<div class="icon">
<object
data="{{ asset('imgs/svg/orders.svg') }}"
type="image/svg+xml"
>
<img
src="{{ asset('imgs/svg/orders.svg') }}"
alt="Zamówienia specjalne"
/>
</object>
</div>
<div class="text-container">
<h3>ZAMÓWIENIA SPECJALNE</h3>
<p>
Realizacja nietypowych zleceń,
wymagających oryginalnych rozwiązań
</p>
</div>
</a>
</div>
<div class="column">
<a href="{{ route('assortment') }}" class="item" aria-label="Asortyment">
<div class="icon">
<object
data="{{ asset('imgs/svg/assortment.svg') }}"
type="image/svg+xml"
>
<img
src="{{ asset('imgs/svg/assortment.svg') }}"
alt="Asortyment"
/>
</object>
</div>
<div class="text-container">
<h3>ASORTYMENT</h3>
<p>
Szeroki asortyment, sięgający ponad 30
tys. produktów
</p>
</div>
</a>
<a href="{{ route('delivery') }}" class="item" aria-label="Dostawa">
<div class="icon">
<object
data="{{ asset('imgs/svg/delivery.svg') }}"
type="image/svg+xml"
>
<img
src="{{ asset('imgs/svg/delivery.svg') }}"
alt="Dostawa"
/>
</object>
</div>
<div class="text-container">
<h3>DOSTAWA</h3>
<p>
Błyskawiczna dostawa zawsze na czas
</p>
</div>
</a>
</div>
</div>
</section>
没有任何数字(就像我需要的那样),它甚至更简单:
def floored_percentage(val, digits):
val *= 10 ** (digits + 2)
return f'{floor(val) / 10 ** digits}%)'