社区
C#
帖子详情
float long类型转换
xiaomo_820427
2012-08-31 08:35:21
昨天遇到一件事情觉得很奇怪,基本确定是类型转换引起的,
刚刚写了一小段测试一下果真如此(c#.net)
float a=8.15f;
long b= (long)(a*1000);
结果b=8149
又用其他几个值测试了一下,基本正常,但是当a*1000的最后一位是0时就会出现比预计值少1的情况
如 8150-8149
8160-8159
类推
谁知道是什么原因呢,如果是位数过多什么还能从类型的长度去考虑,现在很晕
...全文
1309
14
打赏
收藏
float long类型转换
昨天遇到一件事情觉得很奇怪,基本确定是类型转换引起的, 刚刚写了一小段测试一下果真如此(c#.net) float a=8.15f; long b= (long)(a*1000); 结果b=8149 又用其他几个值测试了一下,基本正常,但是当a*1000的最后一位是0时就会出现比预计值少1的情况 如 8150-8149 8160-8159 类推 谁知道是什么原因呢,如果是位数过多什么还能从类型的长度去考虑,现在很晕
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
宝_爸
2012-08-31
打赏
举报
回复
就像十进制不能精确表示1/3,而三进制可以精确表示一样。
有些数字十进制可以精确表示,但是二进制不能精确表示。
zzz82103
2012-08-31
打赏
举报
回复
用double就可以了,float存在精度误差的,比如1.5f,监视里就是1.499999999,双精度的话用double就可以了
xiaomo_820427
2012-08-31
打赏
举报
回复
代码不是我写的,我只负责维护而已,昨天运行了好久的程序突然出现异常才查出来是这么个问题,可以解决,但总是想知道为什么
cheng2005
2012-08-31
打赏
举报
回复
楼主先弄清楚什么是浮点数。
然后再明白一个事实,浮点数做运算本身就是不精确的。
这些都属于基础知识的内容,不扎实的人也许好久才会发现。
偶是小谢
2012-08-31
打赏
举报
回复
不好意思,我这里运行了一下,显示仍然为8150……
宝_爸
2012-08-31
打赏
举报
回复
这篇文章好一点
Java中用浮点型数据Float和Double进行精确计算时的精度问题
http://www.cnblogs.com/n-u-l-l/archive/2012/05/12/2497063.html
C#也有同样问题,所有语言都有同样的问题,只要计算机是二进制的。
宝_爸
2012-08-31
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
这里有文章:
浮点数的二进制表示
http://www.ruanyifeng.com/blog/2010/06/ieee_floating-point_representation.html
我自己还真说不了这么清楚。
[/Quote]
这篇文章不对lz的问题,lz别读了。
xcf007
2012-08-31
打赏
举报
回复
8.15,这个计算机并不会精确的存的8.15的,计算机有精度问题,十进制转二进制也没那么巧除的尽。
宝_爸
2012-08-31
打赏
举报
回复
这里有文章:
浮点数的二进制表示
http://www.ruanyifeng.com/blog/2010/06/ieee_floating-point_representation.html
我自己还真说不了这么清楚。
SQL77
2012-08-31
打赏
举报
回复
float是近似。
换成DOUBLE或DECIMAL
宝_爸
2012-08-31
打赏
举报
回复
应该是二进制float没法精确表示8.15吧。
assky124
2012-08-31
打赏
举报
回复
计算机精度问题,不行就换Double
愚知
2012-08-31
打赏
举报
回复
四舍五入,五舍六入
MySQL 数据类型和运算符
Re: MySQL 数据类型和运算符=============================# 数据类型 整数类型:五种 TINY SMALL MEDIUM INT BIG 浮点和定点小数类型:三种
FLOAT
DOUBLE DECIMAL 日期与时间数据类型:五种 YEAR -1 字符串类型:二种 CHAR(M) VARCHAR(M) -1 二进制字符串:位字段BIT 固定BINARY 可变VARBINARY -1 # 运算符 算术 运算符 比较 运算符 逻辑 运算符 位操作 运算符 运算符的优先级-------------------------------------
Python基本语法_强制数据
类型转换
目录目录 前言 软件环境 Python数据类型的显式转换 显式转换的多种类型 Non-String转换为String str函数 repr str和repr的区别 eval Non-int转换为int
Long
转换为Int使用自定义函数
Float
转换为Int String转换为Int Non-
long
转化为
long
类型 Int转化为
Long
Float
转换为
Long
String转换为
Long
N
在Java中如何将
float
转换为
long
或int数据类型?
在Java中,有三种方法可以将
float
转换为
long
或int,但我们只关注
long
数据类型部分。 将
float
数据
类型转换
为
long
值的第一种方法是将auto-box
float
原语转换为
float
对象并调用
long
Value()方法。 这是一种更结构化的方法,因为其他方法只是简单地将
float
转换为
long
或int以去掉小数点。 也可以按照以下提示编写Java程序,通过将
long
方法替换为对应...
long
类型与
float
类型的转换
最为一个常识,我们都知道浮点型在内存中占用的是4个字节的空间,而
long
型占用的是8个字节的空间。可是为什么4个字节的
float
型的最大值会大于
long
型的最大值呢? 我们都知道,
float
类型的范围是:一3.403E38~3.403E38。而
long
类型的范围是:-2^63~2^63-1(大概是9*10^18)。 我以前也是简单的记住就算完事了,对于它为什么会这样却没有考虑过。 下面...
java
float
强制转换int类型_在Java中如何将
float
转换为
long
或int数据类型?
在Java中,有三种方法可以将
float
转换为
long
或int,但我们只关注
long
数据类型部分。将
float
数据
类型转换
为
long
值的第一种方法是将auto-box
float
原语转换为
float
对象并调用
long
Value()方法。这是一种更结构化的方法,因为其他方法只是简单地将
float
转换为
long
或int以去掉小数点。也可以按照以下提示编写Java程序,通过将
long
方法替换为对应的in...
C#
110,534
社区成员
642,575
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章