且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

[20170725]vim调用bccalc插件问题.txt

更新时间:2022-08-21 09:57:00

[20170725]vim调用bccalc插件问题.txt

http://blog.itpub.net/267265/viewspace-2140886/
http://blog.itpub.net/267265/viewspace-2140823/
http://blog.itpub.net/267265/viewspace-2140602/

--//我个人很喜欢在vim调用bc做各种计算,使用插件bccale,参考前面的链接.
--//今天在使用时遇到1个问题,做一个记录与分析:

1/30000*325=.0183333333333333225
--//注不需要输入等号,打入\bx.显示结果.

--//而我在bc -l下执行如下:
1/30000*325
.01083333333333333225

--//很明显插件bccalc存在明显严重错误,中间少了1个0.
--//而我也建立一些快捷:

noremap  <Leader>cc Yp!!bc -lq<CR>kA = <ESC>J
noremap  <Leader>ch YpIobase=16;<ESC>!!bc -lq<CR>kA = 0x<ESC>Jxguu
noremap  <Leader>cd YpgUU:s/0x//gei<CR>Iibase=16;<ESC>!!bc -lq<CR>kA = <ESC>J

--//想完善看看实现oracle数据块转换,以及scn拆分为scn_wrap,scn_base的计算.
noremap  <Leader>c22 Y2pA/4194304<ESC>!!bc -q<CR>jA%4194304<ESC>!!bc -q<CR>2kA = set dba <ESC>3Js,<ESC>
noremap  <Leader>c32 Y2pA/4294967296<ESC>!!bc -q<CR>jA%4294967296<ESC>!!bc -q<CR>2kA = scn_wrap,scn_base: <ESC>3Js,<ESC>
noremap  <Leader>c16 Y2pA/65536<ESC>!!bc -q<CR>jA%65536<ESC>!!bc -q<CR>2kA = /16 %16: <ESC>3Js,<ESC>

--//打入\cc.可以发现计算是正确的.
1/30000*325 = .01083333333333333225

--//可以发现计算是正确的.那么就是插件存在问题.我仔细跟踪插件的执行.
let answer = system ("echo " . str . " \| bc -l " . preload)

--//我使用vim版本7.4,在linux下我也做了测试,问题一样.再写一个简单的例子:

0.010007=.017
0.01020300=.010203
0.010230=.01023
0.010604=.01064
0.0100070=.010007

--//莫名奇妙!!0.010007=.017,0.010604=.01064.而我在写成0.0100070结果有正确.
--//看来使用插件bccalc要小心.如果你写成如下:

1/30000*325*100=1.083333333333333225
--//又是正确的.回家测试vim 8.0版本看看.在家里使用8.0问题依旧.不知道问题在那里.仅仅做一个记录.

0.01020300=.010203
0.010703=.01073