当前位置: 首页 > 面试题库 >

确定Python中特定数字的精度和小数位数

岳毅
2023-03-14
问题内容

我在Python中有一个包含浮点数的变量(例如num = 24654.123),我想确定数字的精度和小数位数(从Oracle的角度来看),因此123.45678应该给我(8,5),12.76应该给我(4,2)等

我最初是在考虑使用字符串表示形式(通过strrepr),但是这些操作对于大量失败了(尽管我现在理解的是浮点表示法的局限性才是问题所在):

>>> num = 1234567890.0987654321
>>> str(num) = 1234567890.1
>>> repr(num) = 1234567890.0987654

编辑:

好点在下面。我应该澄清。该数字已经是浮点数,正在通过cx_Oracle推送到数据库。我正在尝试在Python中尽我所能来处理对于对应的数据库类型而言太大的浮点数,而不执行INSERT和处理Oracle错误(因为我想处理字段中的数字,而不是记录中的数字)一次)。我想map(len, repr(num).split('.'))我将最接近浮标的精度和比例吗?


问题答案:

获取小数点左边的位数很容易:

int(log10(x))+1

由于浮点值固有的不准确性,小数点右边的数字位数比较复杂。我还需要几分钟才能弄清楚那件事。

编辑: 基于该原理,这是完整的代码。

import math

def precision_and_scale(x):
    max_digits = 14
    int_part = int(abs(x))
    magnitude = 1 if int_part == 0 else int(math.log10(int_part)) + 1
    if magnitude >= max_digits:
        return (magnitude, 0)
    frac_part = abs(x) - int_part
    multiplier = 10 ** (max_digits - magnitude)
    frac_digits = multiplier + int(multiplier * frac_part + 0.5)
    while frac_digits % 10 == 0:
        frac_digits /= 10
    scale = int(math.log10(frac_digits))
    return (magnitude + scale, scale)


 类似资料:
  • 本文向大家介绍java精度计算代码 java指定精确小数位,包括了java精度计算代码 java指定精确小数位的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java指定精确小数位的具体代码,供大家参考,具体内容如下 java代码: 控制台: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍jquery精度计算代码 jquery指定精确小数位,包括了jquery精度计算代码 jquery指定精确小数位的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了jquery指定精确小数位的具体代码,供大家参考,具体内容如下 页面显示: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 问题内容: 以下值给我错误的精度。仅使用特定数字可以观察到它。这可能是一个浮动表示问题,但想知道具体原因。 正在打印的输出代替。 问题答案: 如果希望十进制数字与在Java中输入的数字完全一样,请使用BigDecimal而不是float。 浮点数对于十进制而言本质上是不准确的,因为许多以十进制结尾的数字(例如0.1)都是以二进制形式重复出现的数字,并且浮点数以二进制表示形式存储。

  • 在C++中如何将浮点数转换为字符串,同时指定精度&小数位数? 例如:

  • 将数字四舍五入到指定的小数位数。 使用 Math.round() 和模板字面量将数字四舍五入为指定的小数位数。 省略第二个参数 decimals ,数字将被四舍五入到一个整数。 const round = (n, decimals = 0) => Number(`${Math.round(`${n}e${decimals}`)}e-${decimals}`); round(1.005, 2);

  • 我目前有一个数字列表,我想知道这些数字中的哪些在一定范围内,以及它们在列表中的位置是什么。 我对巴黎相当陌生,所以我不知道该怎么做。 举一个简单的例子来说明我在做什么: 查找位于 0.05 和 0.15 范围内的数字 1 到 20 的逆函数 我列了一个清单,像这样: 从这里,我想要所有i的列表,以便A[i]在该范围内。 但我不知道如何从这里开始。我尝试了一些简单的if/for语句,但这些都不起作用