如何用数字解决这些问题?

时间:2012-04-26 09:33:35

标签: vim floating-point numbers integer exponential

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

体育课。

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

3 个答案:

答案 0 :(得分:2)

:echo printf("%.0f", 4000000000.0 + 1.0)

注意事项:

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

答案 1 :(得分:2)

很容易看到溢出
:let a = 4000000000 | echo a --> -294967296

答案 2 :(得分:1)

使用printf

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

输出:

10200000