2012-04-26 29 views
2

私はまだ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 

なぜこの出力が間違っていますか?

printfを使用してTNX

答えて

1

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

出力:注意すべき

10200000 
+0

で見られているBirei – Reman

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

ポイント:

  • あなたは算術演算を行うためにstring-> int変換を使用していますが、これは正常には良いことではありません。
  • intは機械語サイズなので、特に32ビットマシンでは大きな数値がオーバーフローします。
  • %gを使用した浮動小数点数形式で、精度を制御する場合はprintfを使用します。
  • 大きな数字を扱う場合は浮動小数点数を使用しますが、正確な精度が期待される場合はそれほど大きくありません。
+0

ありがとうあまりにもトムありがとう。 – Reman

+0

「%.0f」にも制限があることに気づきました。 'echo printf("%.0f "、200303004040050500500600.0 + 1.0)'は、 '2003030040400505000000000' - 16個の数値を出力しますか? – Reman

+1

浮動小数点数は、32ビット浮動小数点数の場合、小数点以下桁数が最大約7桁です。あなたは実際にvimで 'big number'算術演算を直接行うことはできません。非常に大きな整数を使用する場合は、Python longを使用することを検討してください。 –

2

オーバーフローを簡単に

:let a = 4000000000 | echo a --> -294967296 
関連する問題