【问题标题】:How can I resolve these problems with numbers?如何解决这些数字问题?
【发布时间】:2012-05-07 00:41:24
【问题描述】:

我仍然对 Vim 中的数字有问题:

p.e.

let a = 1.02 | let b = '10000000' | let total = a*b | echo total --> 1.02e7  

我想避免使用指数。 我怎样才能有输出 10200000 ?

let a = 4000000000 | let b = '1' | let total = a+b | echo total  --> -294967295 

为什么这会给出错误的输出?

Tnx

【问题讨论】:

    标签: vim floating-point numbers integer exponential


    【解决方案1】:
    :echo printf("%.0f", 4000000000.0 + 1.0)
    

    注意事项:

    • 您正在使用 string->int 转换来进行算术运算,这通常不是一件好事。
    • 整数是机器字大小的,所以大数字会溢出,尤其是在 32 位机器上。
    • 浮点数格式通常使用 %g,如果要控制精度,请使用 printf。
    • 如果您要处理大量数字,请使用浮点数,但如果您期望精确的精度,这确实不是很好。

    【讨论】:

    • 我注意到“%.0f”也有限制。 echo printf("%.0f", 200303004040050500500600.0 + 1.0) 输出 2003030040400505000000000 -- 16 个数字?
    • 浮点数的最大精度约为小数点后 7 位,如果它们是 32 位浮点数的话。你真的不能直接在 vim 中做“大数”算术。如果您使用非常大的整数,请考虑使用 Python 长整数。
    【解决方案2】:

    溢出很容易被看到

    :let a = 4000000000 | echo a --> -294967296
    

    【讨论】:

      【解决方案3】:

      使用printf

      let a = 1.02 | let b = '10000000' | let total = a*b | echo printf( "%.f", total)
      

      输出:

      10200000
      

      【讨论】:

        猜你喜欢
        • 2019-01-06
        • 2019-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-30
        • 1970-01-01
        • 2021-05-03
        • 2010-12-22
        相关资源
        最近更新 更多