精华内容
下载资源
问答
  • 在很多场景的计算中,最终得到的数值例如123.45678,要截取2位小数得到123.45,而不是默认的四舍五入方法得到123.46,如何实现呢? 一.小数点后取2位(四舍五入)的方法 方法一:round()函数 方法二:’%.2f...

    在很多场景的计算中,最终得到的数值例如123.45678,要截取2位小数得到123.45,而不是默认的四舍五入方法得到123.46,如何实现呢?

    一.小数点后取2位(四舍五入)的方法

    方法一:round()函数

    其实这个方法不推荐大家使用,查询资料发现里面的坑其实很多,python2和python3里面的坑还不太一样,在此简单描述一下python3对应的坑的情况。

    a = 1.23456
    b = 2.355
    c = 3.5
    d = 2.5
    print(round(a, 3))
    print(round(b, 2))
    print(round(c))
    print(round(d))
    

    结果:

    1.235	# 1.23456最终向前进位了
    2.35	# 2.355居然没进位
    4		# 最终3.5居然变为4了
    2		# 最终2.5取值变为2
    
    • (1)通过上面的函数,看着是不是很晕,感觉round(x,n)函数是否进位也没看出是啥规律
    • (2)round(x,n)函数中,是否进位或四舍五入,取决于n位以及n+1位小数的值
    • (3)只有当n+1位数字是5的时候,容易混淆,如果n为偶数,则n+1位数是5,则进位,例如round(1.23456,3)最终变为1.235
    • (4)如果n为奇数,则n+1位是数5,那不进位,例如round(2.355,2),最终为2.35
    • (5)如果n为0,即没有填写n的时候,最终结果与上面相反,即整数部分为偶数的时候,小数位5不进位,例如(round(2.5)变为2)。
    • (6)整数部分为奇数的时候,小数位5进位。(round(3.5)变为4)

    看完如上的部分,感觉是不是更晕了,所以round()不推荐使用,目前也不知道设计这个函数的目的在哪里?有谁知道麻烦告知一下?

    方法二:’%.2f’ %f 方法

    f = 1.23456
    
    print('%.4f' % f)
    print('%.3f' % f)
    print('%.2f' % f)
    

    结果:

    1.2346
    1.235
    1.23
    
    • (1)原本以为:这个方法是最常规的方法,方便实用,居家旅行必备!
    • (2)但是…
    f = 0.625
    print('%.2f' % f)
    
    # 结果:0.62
    

    具体是否进位,有个概率问题,感兴趣的朋友可以看看评论里面的信息。
    感谢weixin_43094430这位朋友的提示,也感谢其他朋友的参与

    方法三:Decimal()函数

    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位(四舍五不入)的方法

    通过计算的途径,很难将最终结果截取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
    
    展开全文
  • 四舍五入

    2018-08-01 22:26:46
    两位,第三位进行四舍五入运算的表达式是()。 A n=(n*100+0.5)/100.0 B m=n*100+0.5,n=m/100.0 C n=n*100+0.5/100.0 D n=(n/100+0.5)*100.0 A和B容易混淆。 解释】要实现将n中的数值保留小数点后两位,第三位...

    设变量n为float类型,m为int类型,则以下能实现将n中的数值保留小数点后

    两位,第三位进行四舍五入运算的表达式是()。

    A n=(n*100+0.5)/100.0
    B m=n*100+0.5,n=m/100.0
    C n=n*100+0.5/100.0
    D n=(n/100+0.5)*100.0

    A和B容易混淆。

    解释】要实现将n中的数值保留小数点后两位,第三位进行四舍五入,则首先可将n乘以100,此时n*100的最低两位整数将是n的前两位小数,n*100的第一位小数将是n的第三位小数,再将n*100加上0.5,如果n*100的第一位小数(即n的第三位小数)大于或等于0.5,则整数部分加1,否则整数部分不变,然后再将结果赋值给一整型变量其实就是将n*100+0.5的整数部分赋值给整型变量,从而完成了n的第三位小数的四舍五入操作,再将该整型变量除以100.0就得到了所希望的结果。所以正确答案是B

    展开全文
  • 首先,不得不提醒大家一个容易被忽视或者搞混的问题——一般的,0.5这种末尾是5的小数,四舍五入取整应进位。这个进位的意思是:-0.5 → -1;0.5 → 1.即正负情况不同,都向着远离0,使得绝对值更大的方向进位 向上...

    废话少叙,直接上code:

    首先,不得不提醒大家一个容易被忽视或者搞混的问题——一般的,0.5这种末尾是5的小数,四舍五入取整应进位。这个进位的意思是:-0.5 → -1;0.5 → 1.即正负情况不同,都向着远离0,使得绝对值更大的方向进位

    • 向上取整:math.ceil()
      import math
      
      math.ceil(-0.5)
      >>> 0
      
      math.ceil(-0.9)
      >>> 0
      
      math.ceil(0.3)
      >>> 1

      如code所见,math.ceil()严格遵循向上取整,所有小数都是向着数值更大的方向取整,不论正负数都如此

    • 四舍五入:round()

      round(-2.5)
      >>> -2
      
      round(-1.5)
      >>> -2
      
      round(-0.5)
      >>> 0
      
      round(0.5)
      >>> 0
      
      round(1.5)
      >>> 2
      
      round(2.5)
      >>> 2

       如code所示,round()当不传入第二个参数时默认取整,具体就是按照四舍五入来。但值得一提的是这里对小数末尾为5的处理方法:当末尾的5的前一位为奇数:向绝对值更大的方向取整(比如-1.5、1.5处理结果);当末尾的5的前一位为偶数:去尾取整(比如-2.5,-0.5,0.5和2.5的处理结果)。

    • 向下取整:math.floor()

      math.floor(-0.3)
      >>> -1
      
      math.floor(0.9)
      >>> 0

      简单且忠实地向下取整,不再讨论

    • 两个有趣且特殊的Python取整:int()、整除"//"

      • int()

        int(-0.5)
        >>> 0
        
        int(-0.9)
        >>> 0
        
        int(0.5)
        >>> 0
        
        int(0.9)
        >>> 0

        一句话总结:int()函数是“向0取整”,取整方向总是让结果比小数的绝对值更小

      • "//"

        (-1) // 2  # -0.5
        >>> -1
        
        (-3) // 2  # -1.5
        >>> -2
        
        1 // 2    # 0.5 
        >>> 0
        
        3 // 2    # 1.5
        >>> 1

        一句话总结:“整除”符号运算将结果忠实地向下取整,与math.floor()处理结果一样

     

    总结一下:

    1. 向上取整:math.ceil()
    2. 向下取整:math.floor()、整除"//"
    3. 四舍五入:round()——奇数向远离0取整,偶数去尾取整;或言之:奇数进位,偶数去尾
    4. 向0取整:int()

    由于最近在做算法题,许多算法题都要涉及(0-1)/2这类的边界计算,这时候我们想让这个-0.5取整至0,而且想让(4-1)/2的结果1.5取整至1,即正数时向下取整,负数时向上取整,总而言之就是向0取整,这时候我们可以用int()

    展开全文
  • 菜鸟教程中介绍到,round() 函数作用就是,返回浮点数x的四舍五入值。 round( x [, n] ) 参数x,n均为数值表达式,返回值为x的四舍五入值。n为保留的小数位数,不加n则只保留x四舍五入后的整数部分。 &amp...

    round( )函数简介

    菜鸟教程中介绍到,round() 函数作用就是,返回浮点数x的四舍五入值。

    > round( x [, n]  )
    

    参数x,n均为数值表达式,返回值为x的四舍五入值。n为保留的小数位数,不加n则只保留x四舍五入后的整数部分。

    >>> round(2.3)
    2
    >>> round(2.45, 1)
    2.5
    

    特殊情况

    上面的结果并没有错误,这里再用2.675测试一下:

    >>> round(2.675, 2)
    2.67
    

    显然结果不符合四舍五入的规则。为什么会这样呢?原因是:round()函数只有一个参数,不指定位数的时候,返回一个整数,而且是最靠近的整数,类似于四舍五入,当指定取舍的小数点位数的时候,一般情况也是使用四舍五入的规则,但是碰到.5的情况时,如果要取舍的位数前的小数是奇数,则直接舍弃,如果是偶数则向上取舍。

    这也就解释了上述现象。可这样一来用round()函数取浮点数的四舍五入值不就变得不可靠了嘛?这样的函数设计的意义何在?网上搜了一圈答案,觉得这个说法比较准确:

    python3(注意python2 和 3的round()是不一样的,这里仅以python3作说明)中round()对浮点数的取舍遵循的是“四舍六入五平分”,“五平分”就是根据取舍的位数前的小数奇偶性来判断,奇偶平分,符合公平性原则(四舍五入不是公平的),这样一来也就保证了在数据量较大的情况下,筛选数据的真实性。(数学渣,不知道这样理解对否……)

    为什么需要平分呢?原因就是部分小数无法用二进制完整表示,如1.15,转为二进制将是很长的一串数字:1.0010011001100110011001100110011001100110011001100110011 这可不是简单的几个字节就能存放下的。因此这里就出现了取舍的问题。

    那么正确的四舍五入是否无法实现了呢?当然是有解决办法的。比如,当你需要四舍五入保留两位小数的时候,可以将数值乘以100再除以100.0:

    >>> round(2.675 * 100)/100.0
    2.68
    

    这样可以解决部分浮点数四舍五入的问题。为什么是部分呢?笔者发现:

    >>> round(2.135*100)/100.0
    2.13
    

    黑人问号

    检验下过程:

    >>> 2.135*100
    213.49999999999997
    

    WTF!是精度问题嘛!

    >>> Decimal(2.135)*100
    Decimal('213.4999999999999786837179272')
    

    愣住

    无法理解是不是!!二进制的世界正常人真的不懂,盼望一下未来有可以直接计算十进制的硬件诞生吧。

    总结

    在用round()函数进行四舍五入时,如果你对结果有十足把握,并且这就是你想要的结果,那就放心大胆地使用。不然就老老实实写个函数来实现吧,这不是什么难事。

    展开全文
  • A: 浮点数打印,进行四舍五入吗??? //注意: //1. 关于浮点数打印,默认并不是四舍五入--有时会四舍五入,有时不会; //2. 要想实现完全四舍五入--加0.5 (但是这种办法有时也会失效,整型也是进行四舍五入的)...
  • 关于C++中保留几位小数,以及是否四舍五入的方法 代码: // A code block var foo = 'bar'; #include<iostream> #include<iomanip> //输出流控制,setiosflags(ios::fixed),setprecision(n)的头文件 ...
  • C语言实现四舍五入

    万次阅读 多人点赞 2018-04-18 18:07:43
    C语言中实现四舍五入: (int)(a+0.5)即可。 很巧妙的用了取整规则。 也不用导入math.h 同样注意负数的情况。 把 + 换成 - 即可。 float f = …..; int i = (int)(f + 0.5); i就是f四舍五入的结果。 今天我要...
  • 做python实验时碰到这么一道题:输入三个浮点数,求它们的平均值并保留 1 位小数,对小数后第二位数进行四舍五入,最后输出结果错误示范因为涉及到四舍五入,随便搜了一下,发现了好多博客都用round(),就直接拿来用了...
  • Java截取小数点后随意几位数,四舍五入和非四舍五入 Java中截取小数点后随意几位数,非四舍五入,直接截取; 比如:12.23467直接截取小数点后2位为12.23,直接截取小数点后3位为12.234 Java中截取小数点后随意几位数...
  • mysql 四舍五入

    2019-08-02 17:59:21
    mysql系列四、mySQL四舍五入函数用法总结 目录 一、MySQL四舍五入函数ROUND(x) 二、MySQL四舍五入函数ROUND(x,y) 三、MySQL四舍五入函数TRUNCATE(x,y) 回到顶部 一、MySQL四舍五入函数ROUND(x) ROUND(x)...
  • 四舍五入详解

    2020-07-16 11:05:08
    四舍五入详解(这不是你认知的四舍五入) 很详细,有很多Demo并提供了在线运行地址。想搞明白得自己多试试 三种规则 标准四舍五入 四舍五基础上正负不一样 银行家算法 一、标准四舍五入 代表工具 go语言的decimal...
  • 四舍五入的方式: 这种方式可以使用js自带的函数:value.toFixed(x),x为需要保留的小数位数,不足位数时会补0,value须为Number类型; 例: let data=12.135; console.log(data.toFixed(2));//12.14 非四舍五入...
  • python 四舍五入

    2020-11-29 12:22:01
    四舍五入就用round( )?Python四舍五入的正确打开方式! round( )函数简介 菜鸟教程中介绍到,round() 函数作用就是,返回浮点数x的四舍五入值。 > round( x [, n] ) 参数x,n均为数值表达式,返回值为x...
  • VC++浮点数四舍五入保留两位小数VC++浮点数四舍五入保留两位小数
  • 四舍六入五奇偶 :最后一位小数是5的时候,当前一位是奇数的时候就进一位凑成偶数,当前一位是偶数的时候就舍去。... 1、四舍五入"4舍6入5奇偶":&lt;fmt:formatNumber value="${1170....
  • 建议25: 不要让四舍五入亏了一方 本建议还是来重温一个小学数学问题:四舍五入四舍五入是一种近似精确的计算方法,在Java 5之前,我们一般是通过使用Math.round来获得指定精度的整数或小数的,这种方法使用...
  • 1.第一种 四舍五入 方法1: System.out.println(Math.round(66.5)); 方法2: BigDecimal b = new BigDecimal(120.00); //经典的四舍五入。 double f1 = b.setScale(0,RoundingMode.HALF_UP).double...
  • 保留两位小数,不四舍五入 方法一: public static String formatDecimal (double value){ final DecimalFormat formater = new DecimalFormat(); formater.setMaximumFractionDigits(2); formater....
  • php保留两位小数并且四舍五入 代码如下:$num = 123213.666666; echo sprintf("%.2f", $num); php保留两位小数并且不四舍五入 代码如下:$num = 123213.666666; echo sprintf("%.2f",substr...
  • 菜鸟教程中介绍到,round() 函数作用就是,返回浮点数x的四舍五入值。 > round( x [, n] ) 参数x,n均为数值表达式,返回值为x的四舍五入值。n为保留的小数位数,不加n则只保留x四舍五入后的整数部分。 >>...
  • python 如何四舍五入

    千次阅读 2019-08-05 19:16:02
    从统计学的角度,“奇进偶舍”比“四舍五入”更为精确:在大量运算时,因为舍入后的结果有的变大,有的变小,更使舍入后的结果误差均值趋于零。而不是像四舍五入那样逢五就进位,导致结果偏向大数,使得误差产生积累...
  • 从小学我们就学过“四舍五入”算法,但是更加科学的舍入办法应该是“四舍六入”,也就是今天我们要讨论的“银行家舍入”。 大家可以做一个Demo。 C#环境下 1: class Program 2: { 3: static void Main(string[] ...
  • 【Java】Java四舍五入保留1位小数、2位小数...

    万次阅读 多人点赞 2018-10-17 08:37:01
    Java四舍五入保留1位小数的方法: import java.math.BigDecimal; public class Test { public static void main(String[] args) { double d1 = 3.02; System.out.println(d1); //利用字符串格式化的...
  • Number.toFixed(n) -- 保留n位小数点,多出的四舍五入 var num=123456.789; var num1=num.toFixed(2) // 123456.79 如果不要四舍五入,并且一定要去2位小数,即使是“12.1”这种要变成“12.10”可以保留3位小数...
  • 四舍五入函数roundRounding off the numbers can be achieved with round() in R. Round is one of the best ways to make numerical values more meaningful and to get more precise results in the analysis. ...
  • #include <stdio.h> int main() { float a,b; printf(“输入一个实数:”); scanf("%f",&a); b=(int)(a*100+0.5)/100.0; printf("%g四舍五入后为%g\n",a,b);//%g为去掉无意义的0 }
  • C语言四舍五入函数

    千次阅读 2019-04-15 12:04:55
    C语言四舍五入函数
  • BigDecimal 四舍五入

    千次阅读 2018-08-01 14:18:01
    public static void round_...四舍五入(保留位后一位是5进位) = " + new BigDecimal("2.35").setScale(1, BigDecimal.ROUND_HALF_UP)); 常用 System.out.println("四舍五入(保留位后一位是5舍...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,880
精华内容 9,152
关键字:

四舍五入