社区
Eclipse
帖子详情
数据库中double类型的数据,Java用double接小数位全部变为0
jquerybootstrap
2019-03-21 03:18:37
Mem{id=47, total=15.0, used=7.0, free=8.0, createTime=Thu Mar 21 15:13:35 CST 2019, ip='192.168.0.121'}
47 15.92 7.18 8.75 2019-03-21 15:13:35 192.168.0.121
请问如何解决
...全文
1577
4
打赏
收藏
数据库中double类型的数据,Java用double接小数位全部变为0
Mem{id=47, total=15.0, used=7.0, free=8.0, createTime=Thu Mar 21 15:13:35 CST 2019, ip='192.168.0.121'} 4715.927.188.752019-03-21 15:13:35192.168.0.121 请问如何解决
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
潘宸 .
2019-04-28
打赏
举报
回复
1
你数据库的小数位数是不是没设置
931828653
2019-03-21
打赏
举报
回复
要么 你设置为string 要么 用BigDecimal str = new BigDecimal(rs.getDouble(2)); 试试
jquerybootstrap
2019-03-21
打赏
举报
回复
引用 1 楼 931828653 的回复:
你的实体类 和 数据库类型一致不
数据库是double,实体也是double呀
931828653
2019-03-21
打赏
举报
回复
你的实体类 和 数据库类型一致不
使用Matlab下载googlefinance上面的option
数据
版本2012a-getoption.m
使用Matlab下载googlefinance上面的option
数据
版本2012a-getoption.m 本帖最后由 1989111 于 2014-3-31 12:00 编辑 之前一直潜水,但是后来写了点程序回馈大家,献丑了!大家都知道下载yahoo 或者google的的股票
数据
API,但是option他们没有提供API。 所以,一般的entry level的
数据
拿daily的就好了. 所以今天鄙人讲讲怎么在google finance 拿option的
数据
. 一下方法,也是鄙人自创的,用的是matlab,code也很原始,但是用来抛砖引玉,也是极好的. 大家在matlab里面自创一个function,复制粘贴一下就好了,用法很简单, ticker用string的名字输入就好,例如[call,put]=getoption;,就可以得到当天option,call 和put的
数据
了. 下面是程序源代码: function [calls,puts]=getoption QQ截图20140330224814.png 请注意源代码里面没有这一句。因为我木有权限发url! sourcefile=urlread;目的有三:1. 我不读取网页
数据
,以上的修改过的link是以下下载链
接
, output是JSON 文件,属于google API的范畴. 显得高端大气上档次一些. 用正则表达式读网页拖慢网络速度,于是改用,这个人家网站自己提供的下载链
接
,或者用code: A=urlwrite; B=importdata; 然后对B做后面的正则表达式处理,这样可以减少对网站的资源占用.2. 读取网页不可靠,网页上很多冗余信息,对扒
数据
没啥用处, JSON由于有API提供的
接
口,写作方式比较固定,几乎没有冗余信息,读取工作顺利,出错概率小.3. JSON 文件在
java
里面可以直
接
读取,如果用matlab在
java
里面写得话会很方便,但是哥还是坚持用低调而奢华的用正则表达式读取JSON文件, 大家可以用word打开JSON文件,看看里面的格式,写得挺整齐的. 下面的code照旧,写得不好不要见怪,多谢各种给我的代码提供意见的热心码农,另外在一位热心网友的留言下我找到了如何下载全部option的办法, 感谢那位网友提供的帮助,他给我的指点实质上告诉了我:其实google整个网页的
数据
呈现就是以JSON文件的读取做基础的! 这也是我作此修改的最大原因,以期达到更大可靠性.但是人家是做有偿服务的,所以我不能贴出来抢别人生意,请大家见谅 callstart=regexpi; [locations,datefile]= regexp; strike= regexp; bid= regexp; ask= regexp; volume=regexp; price=regexp; OpenInterest=regexp; Expiration=regexp; for i=1:length strike{i}= regexp; bid{i}= regexp; ask{i}= regexp; volume{i}= regexp; price{i}= regexp; OpenInterest{i}= regexp; Expiration{i}= regexp\w.*', 'match'); end index1=find ; index2=find ; A={price{index1};strike{index1};bid{index1};ask{index1};volume{index1};OpenInterest{index1};Expiration{index1}}; B={price{index2};strike{index2};bid{index2};ask{index2};volume{index2};OpenInterest{index2};Expiration{index2}}; A=A'; B=B'; for i=1:length calldata.price{i}= str2
double
; calldata.strike{i}=str2
double
; calldata.bid{i}=str2
double
; calldata.ask{i}=str2
double
; calldata.Volume{i}=str2
double
; calldata.OpenInterest{i}=str2
double
; calldata.Expiration{i}= cell2mat; end for i=1:length putdata.price{i}=str2
double
; putdata.strike{i}=str2
double
; putdata.bid{i}=str2
double
; putdata.ask{i}=str2
double
; putdata.Volume{i}=str2
double
; putdata.OpenInterest{i}=str2
double
; putdata.Expiration{i}= cell2mat; end calls=dataset({calldata.strike','Strike'},{calldata.price','Price'},{calldata.bid','Bid'},{calldata.ask','ask'},... {calldata.Volume','Volume'},{calldata.OpenInterest','Open Interest'},{calldata.Expiration','Expiration'}); puts=dataset({putdata.strike','Strike'},{putdata.price','Price'},{putdata.bid','Bid'},{putdata.ask','ask'},... {putdata.Volume','Volume'},{putdata.OpenInterest','Open Interest'},{putdata.Expiration','Expiration'}); end 下面鄙人就来讲解一下里面的代码是干啥的. 第一行当然是输入一个ticker,输入的形式必须是string的,用matlab的话说就是'XXXX', XXXX代表ticker; 第二行,是吧一个网址和ticker串起来,因为google finance上的网址都有规律,所以如果你要搜索google的option今天的报价, 有图为证: 所以在执行当
中
,已经有了一个string 变量url,它指向goog finance网址: 然后我们看看是不是: 仔细一看,真的是, 然后第二句就是读取这个网页的源文件, 简单说来就是我们打开了这个网页,然后read source file就会出来各种字母的那个页面 然后再看看后面的code callstart=regexpi; [locations,datefile]= regexp; 这个东西是叫做matlab正则表达式的应用,想系统学的同学可以上网搜,比我讲的要好, 我只是要用的时候拿出来看, 上图: 大家看到strike的规律没有? 都是strike 后面跟着一个价格, 所以,下面这个code就是讲得是匹配含有{xxx strike.xxx}的最小长度的字符.*? 的意思就是尽可能短的字符 [locations,datefile]= regexp; 然后大家可以打开datefile去看看 找到的匹配字符 大概是这个模样: {cid:"216439834517106",name:"",s:"GOOG130830P00710000",e:"OPRA",p:"-",c:"-",b:"-",a:"0.45",oi:"0",vol:"-",strike:"710.00",expiry:"Aug 30, 2013"} 这个算是一个元素,datefile里面有好多个这样的元素.... 再看下面的语句,明白了上面的,下面的也就不难理解了 strike= regexp; bid= regexp; ask= regexp; volume=regexp; price=regexp; OpenInterest=regexp; Expiration=regexp; 这几个就是在{cid:"216439834517106",name:"",s:"GOOG130830P00710000",e:"OPRA",p:"-",c:"-",b:"-",a:"0.45",oi:"0",vol:"-",strike:"710.00",expiry:"Aug 30, 2013"}里面找含有strike:".*?",b:".*?"等等的字符,于是乎我们又进了一步,把响应的字符都找出来了. 得到了price大概像这个东西 ',p:"-"' ',p:"-"' ',p:"-"' ',p:"-"' ',p:"-"' ',p:"-"' ',p:"-"' ',p:"0.40"' ',p:"0.45"' ',p:"0.10"' ',p:"0.10"' 其他的例如expiration啥的大概都差不多. 到这里为止,我们要的
数据
都已经扒下来了,但是这样的
数据
存在的形式是在让人蛋疼,于是乎我们做一下的工作 for i=1:length strike{i}= regexp; bid{i}= regexp; ask{i}= regexp; volume{i}= regexp; price{i}= regexp; OpenInterest{i}= regexp; Expiration{i}= regexp\w.*', 'match'); end 这个讲的是既然我们找到了那些
数据
,
数据
总是跟着p:"0.10",这样子多难看啊, 拿price的例子来说,price{i}= regexp; 想要做的意思就是,遍历price这个向量里面每一个元素, 只留下xxx.xxx的
数据
,[0-9]{1,}表示至少出现一次,[0-9]{1,}.[0-9]{1,}则表示把一个含有小数的数字读取出来, 于是p:"0.10"就会变成0.10啦,同理跟其他的也是一样的. 然后就是 index1=find ; index2=find ; A={price{index1};strike{index1};bid{index1};ask{index1};volume{index1};OpenInterest{index1};Expiration{index1}}; B={price{index2};strike{index2};bid{index2};ask{index2};volume{index2};OpenInterest{index2};Expiration{index2}}; 当时我留了call start这个变量没讲,是因为这个相当于一个路标,表示着call 和put的分界线, find这个函数只不过是找到大于call start和小于它的相对位置而已. index1 和index2都含有了put 和 call的相对位置. 后面的没啥好说了,就是data转换输出的东西,A是call,B是put的
数据
这里没啥好说的,就是为了输出方便,好看, 需要说明的是这里用了matlab的dataset和cell函数,因此,获得的
数据
不能够直
接
拿来做向量运算,如果要用到,要需要做一下转换,dataset2cell,然后cell2
double
的转换,这样的话就可以变成一般的
double
型的变量来运算啦. 有图为证: 然后再说一下这个函数的缺点,第一,变成dataset和cell要转换,这是一个缺点.第二, 不能拿历史
数据
,这个我知道啊,option 的历史
数据
都是要钱的,屌丝只能能够每天跑这个程序一次,自己建立一个自己需要的option pricec的
数据
库
了. 需要指出的是google finance有15min的延迟,因此,intraday的
数据
只要你跑程序多,是可以拿到的. 这是程序代码[/align][align=left][align=left]function [calls,puts]=getoption[/align] [align=left]sourcefile=urlread;[/align] [align=left]callstart=regexpi;[/align][align=left][locations,datefile]= regexp;[/align][align=left]strike= regexp;[/align][align=left]bid= regexp;[/align][align=left]ask= regexp;[/align][align=left]volume=regexp;[/align] [align=left]price=regexp;[/align][align=left]OpenInterest=regexp;[/align][align=left]Expiration=regexp;[/align][align=left]for i=1:length[/align][align=left] strike{i}= regexp;[/align][align=left] bid{i}= regexp;[/align][align=left] ask{i}= regexp;[/align][align=left] volume{i}= regexp;[/align][align=left] price{i}= regexp;[/align][align=left] OpenInterest{i}= regexp;[/align][align=left] Expiration{i}= regexp;[/align][align=left]end[/align] [align=left]index1=find ;[/align][align=left]index2=find ;[/align][align=left]A={price{index1};strike{index1};bid{index1};ask{index1};volume{index1};OpenInterest{index1};Expiration{index1}};[/align][align=left]B={price{index2};strike{index2};bid{index2};ask{index2};volume{index2};OpenInterest{index2};Expiration{index2}};[/align][align=left]A=A';[/align][align=left]B=B';[/align] [align=left]for i=1:length[/align] [align=left] calldata.price{i}= str2
double
;[/align][align=left] calldata.strike{i}=str2
double
;[/align][align=left] calldata.bid{i}=str2
double
;[/align][align=left] calldata.ask{i}=str2
double
;[/align][align=left] calldata.Volume{i}=str2
double
;[/align][align=left] calldata.OpenInterest{i}=str2
double
;[/align][align=left] calldata.Expiration{i}= cell2mat;[/align][align=left]end[/align][align=left]for i=1:length[/align][align=left]putdata.price{i}=str2
double
;[/align][align=left]putdata.strike{i}=str2
double
;[/align][align=left]putdata.bid{i}=str2
double
;[/align][align=left]putdata.ask{i}=str2
double
;[/align][align=left]putdata.Volume{i}=str2
double
;[/align][align=left]putdata.OpenInterest{i}=str2
double
;[/align][align=left]putdata.Expiration{i}= cell2mat;[/align][align=left]end[/align] [align=left] calls=dataset;[/align][align=left] puts=dataset;[/align][align=left]end[/align] [/align] [align=left]复制代码 复制代码
java
的
double
类型
,保存到Oracle
数据
库
变成了整数
今天测试,发现我页面上输入小数,保存到
数据
库
变成了整数,我检查了一遍,form,pojo,hbm配置文件,都是
double
类型
,没有在哪里取整,然后突然想起来,oracle
数据
库
没有int,
double
等类型,只有一个number类型,假设保存5位,小数保留两位,则定义如下:整数则定义为number(5),小数则定义为number(5,2)。 粗心大意,谨记!...
MySQL
数据
类型和运算符
Re: MySQL
数据
类型和运算符=============================#
数据
类型 整数类型:五种 TINY SMALL MEDIUM INT BIG 浮点和定点小数类型:三种 FLOAT
DOUBLE
DECIMAL 日期与时间
数据
类型:五种 YEAR -1 字符串类型:二种 CHAR(M) VARCHAR(M) -1 二进制字符串:位字段BIT 固定BINARY 可变VARBINARY -1 # 运算符 算术 运算符 比较 运算符 逻辑 运算符 位操作 运算符 运算符的优先级-------------------------------------
数据
库
中
float,
double
类型
存储小数时位数增多问题
在SQLr
中
实际上只有两种小数数值类型,分别是float(近似数值)和decimal(精确数值),这两种类型能表示所有的小数数值类型。float,
double
(近似数值类型)表示的是近似数值,存在一定的精度缺失。这是浮点数的特点。
MySQL
double
类型
的字段保存不了小数
今天开发途
中
遇到一个很奇怪的bug,前端传来一个小数值0.5,
java
使用mybatis后存到
数据
库
时
变为
了1。我看了下
数据
库
这个字段的类型是
double
,这个肯定不会错,然后给了个默认值是1。所以这种情况我肯定先想到的是: 是不是前端传来的值用
java
DTO
接
收时那个值没设置进去,
Double
类型
的该字段为null,所以插入记录到mysql时,由 于该字段没...
Eclipse
58,453
社区成员
49,451
社区内容
发帖
与我相关
我的任务
Eclipse
Java Eclipse
复制链接
扫一扫
分享
社区描述
Java Eclipse
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章