【问题标题】:Rounding to a power of 10四舍五入到 10 的幂
【发布时间】:2011-07-20 22:41:47
【问题描述】:

我有一个变量tauMax,我想将其向上四舍五入到最接近的十的幂(1、10、100、1000...)。我正在使用下面的表达式来查找最接近 tau 数组中最大值的整数。我正在找到最大值,因为我正在尝试计算应该是 x 轴截止值的十的幂。由于这个原因,tauMax 等于 756,所以我想要一个输出 1000 或 3(对于 10^3)的表达式。

tauMax = round(max(tau));

非常感谢任何帮助!

【问题讨论】:

  • 你也可以这样做,我相信根据位数。
  • 这是个好主意。你知道我会使用什么命令来查找给定数字中的位数吗?
  • @Alex Nichols - 因为你说的是​​ base 10,所以请使用 log10(请参阅下面的答案)。
  • 似乎有一些不同的方法可以做到这一点:mathworks.co.jp/matlabcentral/answers/…,但其他方法可能更容易。

标签: matlab rounding logging exponent


【解决方案1】:

由于您说的是基数 10,您可以只使用 log10 来获取位数。

怎么样:

>> ceil(log10(756))

ans =

     3

【讨论】:

  • 非常好,并且使用 python math 和 @steveha 的答案一样工作
【解决方案2】:

我并没有真正使用 Matlab,但是用我知道的任何语言执行此操作的常用方法是:取对数以 10 为底,然后将该数字四舍五入为最接近的整数,然后计算 10 的次方数字。在 Python 中:

from math import ceil, log

def ceil_power_of_10(n):
    exp = log(n, 10)
    exp = ceil(exp)
    return 10**exp

>>> print(ceil_power_of_10(1024))  # prints 10000

【讨论】:

  • 打印的不是10000吗?
  • @Nils_M 是的,它打印 10000。感谢您的更正!我将编辑答案并更正评论。
【解决方案3】:

您还可以查看内置 Matlab 函数 nextpow2(N) 的源代码(只需打开 nextpow2.m),以了解 Mathworks 工程师如何将其实现为 2 的幂,并创建一个新函数将此源代码调整为10 的幂。

http://www.mathworks.it/it/help/matlab/ref/nextpow2.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2023-03-28
    • 2022-11-24
    • 2018-12-31
    • 1970-01-01
    相关资源
    最近更新 更多