大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说只取小数点后两位函数公式_js四舍五入保留两位小数,希望能够帮助大家进步!!!
在很多场景的计算中,最终得到的数值例如123.45678,要截取2位小数得到123.45,而不是默认的四舍五入方法得到123.46,如何实现呢?
- [一.小数点后取2位(四舍五入)的方法](https://javajgs.com/#2_5)
- [方法一:round()函数](https://javajgs.com/#round_8)
- [方法二:'%.2f' %f 方法](https://javajgs.com/#2f_f__123)
- [方法三:Decimal()函数](https://javajgs.com/#Decimal_154)
- [二.小数点后取2位(四舍五不入)的方法](https://javajgs.com/#2_183)
- [方法一:](https://javajgs.com/#_213)
1.首先不推荐使用这个函数、python2和python3对应的效果还不太一样,使用的时候慎重! 2.也感谢评论区网友的提示,有人说具体用法是**四舍六入五成双**。但是发现也不太对,还是有坑的,各位看官请看? 3.欢迎各位来补充?
四舍六入五成双, 四舍六入五凑偶的意思, 根据百度词条的解释如下:
# (1)、(2)规则
a = 1.45321
b = 2.45678
print(round(a, 2))
print(round(b, 2))
# 打印内容
1.45
2.46
# (3)规则
a = 1.12500002
b = 2.15500002
c = 2.15500000
print(round(a, 2))
print(round(b, 2))
print(round(c, 2))
=# 打印内容
1.13
2.16
2.15
小数点后第三位是我们重点关注的,而第三位后面还有值,那直接进位。上面案例中2.155后面的几个0,都忽略。
# (4)、(5)规则
print(round(1.205, 2))
print(round(1.215, 2))
print(round(1.225, 2))
print(round(1.235, 2))
print(round(1.245, 2))
print(round(1.255, 2))
print(round(1.265, 2))
print(round(1.275, 2))
print(round(1.285, 2))
print(round(1.295, 2))
# 打印内容
1.21 # 1.205---进位
1.22 # 1.215---进位
1.23 # 1.225---进位
1.24 # 1.235---进位
1.25 # 1.245---进位
1.25 # 1.255---未进位
1.26 # 1.265---未进位
1.27 # 1.275---未进位
1.28 # 1.285---未进位
1.29 # 1.295---未进位
通过以上打印结果发现, (4)、(5)规则根本就不适用上述情况。总结规律如下: 如果精确位后面的一位是5,且5后面没其他数值,此时精确位如果是0—4,则进位(5种情况)。如果是5–9则不进位(5种情况)。 我的理解是,不同语言、不同函数的处理都是细微的差别。但总归把进位和不进位的概率,都是平均分布的。
最终的规律总结如下:
f = 1.23456
print('%.4f' % f)
print('%.3f' % f)
print('%.2f' % f)
结果:
1.2346
1.235
1.23
f = 0.625
print('%.2f' % f)
# 结果:0.62
具体是否进位,有个概率问题,感兴趣的朋友可以看看评论里面的信息。 感谢weixin_43094430这位朋友的提示,也感谢其他朋友的参与
from decimal import Decimal
aa = Decimal('5.026').quantize(Decimal('0.00'))
bb = Decimal('3.555').quantize(Decimal('0.00'))
cc = Decimal('3.545').quantize(Decimal('0.00'))
print(aa)
print(bb)
print(cc)
结果:
5.03
3.56
3.54
decimal这个模块在很少用,如上图中,3.555结果为3.56,而3.545结果变为3.54,一个5进位了,一个是5没进位,具体原因不详。 所以不推荐使用这个方法!!!
通过计算的途径,很难将最终结果截取2位,我们直接想到的就是如果是字符串,直接截取就可以了。 例如
num = '1234567' #字符串num
print(num[:3])
结果:
123
如果是123.456取2位小数(截取2位小数),值需要把小数点右边的当做字符串截取即可 partition()函数(将字符串根据字符串切割): http://www.runoob.com/python/att-string-partition.html
num = '123.4567'
num_str = num.partition(".")
print(num_str)
结果:
('123', '.', '4567') # 三个元素的元祖
拼接字符串:format()函数的使用 https://blog.csdn.net/i_chaoren/article/details/77922939
def get_two_float(f_str, n):
a, b, c = f_str.partition('.')
c = c[:n]
return ".".join([a, c])
num = "123.4567" #(1)隐患一,传入函数的是字符串
print(get_two_float(num, 2))
num2 = '123.4' # (2)隐患二,如果传入的字符串小数位小于最终取的位数
print(get_two_float(num2, 2))
结果:
123.45
123.4
最终版本:
def get_two_float(f_str, n):
f_str = str(f_str) # f_str = '{}'.format(f_str) 也可以转换为字符串
a, b, c = f_str.partition('.')
c = (c+"0"*n)[:n] # 如论传入的函数有几位小数,在字符串后面都添加n为小数0
return ".".join([a, c])
num = 123.4567
print(get_two_float(num, 2))
num2 = 123.4
print(get_two_float(num2, 2))
结果:
123.45
123.40
今天文章到此就结束了,感谢您的阅读,Java架构师必看祝您升职加薪,年年好运。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有