+ 4
Is there a way to get rid of useless zeros in bools in Python?
Is there a way to get rid of useless zeros in bools in Python? Otherwise I still have to use my own functions. Example: 1.500000 or 42.0000000 https://code.sololearn.com/cqtT5yT3xnJN/?ref=app
16 ответов
+ 6
print(f"Output:{inp.rstrip('0').rstrip('.') or 0.0}")
+ 6
Which "bools"? Aren't you rather trying to format floats?
They aren't useless, that's how Python represents the numbers. In case you want to use them for further calculations, I would not recommend you to modify them unless you are 100% sure.
If it is about representing output, you could just use rounding or string formatting options.
+ 6
Arda Gurses , Oma Falk ,
if input is not a float but an int like 9900, the result will be: 99. such inputs can be happen by accident.
so it is necessary to check if input is a float or not.
+ 5
Arda Gurses ,
here are some thoughts from me:
(1) print() will remove all 'useless zeros' except it is the only one of them:
print(12.23000) prints: 12.23
print(12.00000) prints: 12.0
print(0.0) prints: 0.0
(2) for all the cases that should have no 'useless zero':
print(f'{12.00000:g}') prints: 12
print(f'{0.00000:g}') prints: 0
so we can use f-string for all cases by using the format specifier `g` to get the task done. this does also solve the issue when printing e.g.100
print(f'{100:g}') prints: 100
+ 5
Jayakrishna🇮🇳 ,
we can convert string representation of a float to real float datatype. this can be done inside the f-string output:
# if `numbers` are given as string format
numbers = ['0.0', '123.1200', '333', '1200', '0', '-17.01']
for inp in numbers:
print(f'{float(inp):g}')
+ 5
Jayakrishna🇮🇳 ,
maybe there is a misunderstanding.
in the initial code the op asked to try it with the following values:
lst = ['1.00', '32.230000', '0.5', '123.0000']
for num in lst:
print( int(float(num))) # your suggested code
this is the result:
original value after converting with
your sample:
print( int(float(num))) # your suggested code
1.00 1 => ok
32.230000 32 => NOT ok, should be 32.23
0.5 0 => NOT ok should be 0.5
123.0000 123 => ok
+ 5
Prince Kumar
Floating point rounding may not always accurate. So That's may because rounding issue, depends on method used for rounding even or odd ..
Hope this explain more details :
https://www.theregister.com/2006/08/12/floating_point_approximation/
+ 5
Prince Kumar ,
if precision matters, it is better to use Decimal format. see the sample in the file. the sample takes the last number from your photo:
https://code.sololearn.com/c5QzNuk5m0qr/?ref=app
+ 3
Lothar
Yes. Ok. I may got diverted by examples...
I mean, I will use :
inp = float(input())
if inp == int(inp) : inp = int(inp)
print(f"Your input: {inp}")
Or simply your way :
print( f"{float(input()):g}")
note : all way, using float(), that's what my suggestion, question .. is about.
+ 2
Lothar yes we have to take it into account. The zeroes must be "useless". THanks for this point.
+ 2
Lothar
My suggestion is only => float(inp) .
But why I added int() , is actually not about OP question.. I forgot why added that. May be it's alternative suitables for your example '9900'.
Also, 2nd time only observed from OP code is
if arr[-1] = '.' : arr.pop() so i thought to making int value.. may be i should see examples again.. But why whole point is asking about only
print( float( inp) ) # just.. why I added int, is out of my mind now. But not my actual answer..
OP function is equal to :
float( inp )
On need to 1.0 to 1 , we can add int().
float() returns as 1.0
Edit:
Yes. OP code returning 1.00 to 1
In that case, int() helps...
May be the reason i added int()
+ 2
Prince Kumar ,
thanks.
+ 1
Why not float(inp) just?
print(int(float(inp)))
+ 1
But the OP taking value as string.. Not float number.. value is in 'inp' of str type...
Is that works fine?
+ 1
Arda Gurses I think an important question is how you intend to use these strings (that look like floats) once you have them?
If you're not just prettying up what was read from input for output, then what will the values be used for?
+ 1
Lothar
Its the same as
print( float(inp) )
why fstring then..?
The OP can replace his function with just
print( int( float(inp) ))
If it is about converting str value, then f'{inp:g} not works. If it allowed to use float then float( inp ) is enough. So why it not allowed is what I mean.