- 主题:qt和C++问题
把一个string的子串转成浮点数 不丢小数位
比如一个长串 sfaewfadsf1305031473.158420hklhlkh
中间有数据部分 定位到数据部分后可以用QString::fromStdString().substr正常截取数据部分输出
>> QStr: "1305031473.190828"
但是转换时小数位全部变为0
>> QStr: 1305031424.000000
>> QStr: 1305031424.000000
>> QStr: 1305031424.000000
qDebug() << " >> QStr: " <<fixed << qSetRealNumberPrecision(6)<< QString::fromStdString().toFloat();
然后试着用atof(.c_str())这种也失败了
请指教
--
修改:scanworld FROM 58.128.3.*
FROM 58.128.3.*
你不写这个的话,会输出什么?
qSetRealNumberPrecision(6)
【 在 scanworld (臭蛋超人) 的大作中提到: 】
: 把一个string的子串转成浮点数 不丢小数位
: 比如一个长串 sfaewfadsf1305031473.158420hklhlkh
: 中间有数据部分 定位到数据部分后可以用QString::fromStdString().substr正常截取数据部分输出
: ...................
--
FROM 117.24.206.*
【 在 scanworld 的大作中提到: 】
: 把一个string的子串转成浮点数 不丢小数位
: 比如一个长串 sfaewfadsf1305031473.158420hklhlkh
: 中间有数据部分 定位到数据部分后可以用QString::fromStdString().substr正常截取数据部分输出
: ...................
float 一共32位,1位符号,8位指数,23(还有一位隐含的1)位来保留数字
一共24位,2^24 =16xxxxxx只能保留7位精度(10^7 < 16xxxxxx < 10^8)
你的1305031473.190828,不光是小数,整数部分从73开始就丢掉了,不是显示不显示的问题
你的需求要保留精度应该直接存字符串
--
修改:hanjiamajia FROM 199.19.107.*
FROM 125.71.135.*
谢谢。
正好复习下。
【 在 hanjiamajia 的大作中提到: 】
:
: float 一共32位,1位符号,8位指数,23(还有一位隐含的1)位来保留数字
: 一共24位,2^24 =16xxxxxx只能保留7位精度(10^7 < 16xxxxxx < 10^8)
: ...................
--
FROM 120.85.149.*
为啥不 toDouble? float 应该就只有10位精度,表示不出那么多位。
【 在 scanworld 的大作中提到: 】
: 把一个string的子串转成浮点数 不丢小数位
: 比如一个长串 sfaewfadsf1305031473.158420hklhlkh
: 中间有数据部分 定位到数据部分后可以用QString::fromStdString().substr正常截取数据部分输出
: ...................
--
FROM 117.136.54.*
后来toDouble了 float不行
【 在 dormouseBHU 的大作中提到: 】
: 为啥不 toDouble? float 应该就只有10位精度,表示不出那么多位。
--
FROM 123.122.153.*
我主要是没数过 视觉上感觉没那么多数 后来数了一下就toDouble了 浪费了不少时间
【 在 hanjiamajia 的大作中提到: 】
:
: float 一共32位,1位符号,8位指数,23(还有一位隐含的1)位来保留数字
: 一共24位,2^24 =16xxxxxx只能保留7位精度(10^7 < 16xxxxxx < 10^8)
: ...................
--
FROM 123.122.153.*
不写默认科学计数
【 在 hgoldfish 的大作中提到: 】
: 你不写这个的话,会输出什么?
: qSetRealNumberPrecision(6)
:
--
FROM 123.122.153.*
科学计数怎么了?有什么影响吗
【 在 scanworld 的大作中提到: 】
: 不写默认科学计数
--
FROM 120.244.156.*
用double能好一点
受不了的话自己实现,用int64,外加一个小数点位置
【 在 scanworld 的大作中提到: 】
: 把一个string的子串转成浮点数 不丢小数位
: 比如一个长串 sfaewfadsf1305031473.158420hklhlkh
: 中间有数据部分 定位到数据部分后可以用QString::fromStdString().substr正常截取数据部分输出
: ...................
--
FROM 221.218.215.*