java中1和1.0_在Java中如何以0.1f增量在0.1f和1.0f之间进行迭代?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Java floats and doubles, how to avoid that 0.0 + 0.1 + … + 0.1 == 0.9000001?
我在Java中遇到以下问题-我需要以0.1f的增量在0.1f和1.0f之间进行迭代,因此我希望输出如下所示:
0.1
0.2
0.3
0.4
...
0.9
相反,当我这样做时:
for(float i = 0.1f; i < 1f; i += 0.1f)
System.out.println(i);
我懂了
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001
我想这与计算机表示分数的方式有关,但是我想知道为什么会这样,以及是否有什么办法可以阻止它。
谢谢。
您可以改用双打吗?
确实,这根本不可行。 没有确切的值0.1可表示为浮点数或双精度数。
"我想知道这是为什么"-简短的答案是"舍入误差"。 要获得较长的答案,请阅读以下内容-docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html。" ...如果有什么我可以阻止的事情"-简短回答"不"。
在for循环中使用整数,以避免重复的浮点数学运算,这会增加浮点错误。
for (int i = 1; i < 10; i++)
{
float f = (float) i / 10.0f;
System.err.println(f);
}
您可以尝试以下方法:
for(int i = 1; i < 10; i++)
System.out.println(i/10f);
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
您所看到的是浮点数固有的不准确性的结果,如果您不断添加它们,这些自然就会累积,就像在发布的代码中所做的那样。 如果改为在循环中使用int,则避免进行float加法运算,因此也避免了错误累积。
为什么要投反对票?
我不是那个否决这个答案的人,但是如果我猜出来的话,因为您的输出以0.0开头,而不是0.1开头。
@rgettman啊,是的-更改了1个字符,感谢您指出。我真的希望投票者会发表评论以表明这些事情。
浮点数是二进制的,不能很好地表示小数
如果适用,则以1/8或0.125进行迭代。
for(float i =1.0f;i<10f;i+=1f)
System.out.println(i/10f);`
很丑陋,但可以在这里使用(Ubuntu AMD64 OpenJDK)
浮动我?????????
引用我自己:这很丑陋,但是在这里有效。
嗯...看起来/听起来像是我的伏都教解决方案。
引用自己:这很丑陋,但是在这里有效
...只要您继续牺牲鸡!!"它似乎行之有效",而没有清楚地理解为什么编写脆弱的,无法维护的代码。我们应该不鼓励新程序员使用这种编程方法……而不是向他们提供我们自己的伏都教编程"解决方案"以复制到他们的代码中。
精彩。如果没有可用的鸡肉,则可以替代被诅咒的鸭子。这是我提到的"但可以在这里使用(Ubuntu AMD64 OpenJDK)":我不知道它是否可以在x86上运行(并且我不在乎)。对发生的情况的理解是微不足道的:1/10在任何二进制浮点数中都无法表示,无论精度如何。我不鼓励任何人(无论有经验的人)尝试使0.1成为一个精确的浮点数..它只会起作用。我要说的是:这在指定的确切情况下有效。再多一点。
java中1和1.0_在Java中如何以0.1f增量在0.1f和1.0f之间进行迭代?相关推荐
- matlab如何判断矩阵中元素都大于0_在MATLAB中找到矩阵中零元素的数量
I have a NxM matrix for example named A. After some processes I want to count the zero elements. How ...
- canvas java 上传截图_在Vue项目中使用html2canvas生成页面截图并上传
使用方法 项目中引入 npm install html2canvas html代码 //html代码 js代码 // 引入html2canvas import html2canvas from 'ht ...
- java中引用类型_您真的了解Java中的4种引用类型吗?
Java中提供了四个级别的引用:SoftReference,FinalReference,WeakReference和PhantomReference.在四种引用类型中,只有FinalReferenc ...
- Java 中关于 try、catch、finally 中的细节分析
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:God Is Coder https://www.cnblo ...
- word录入表单数据 java 导入系统,java导入excel | 怎么把excel中的数据批量导入到word中的表格中...
用javascript怎么实现把excel中的数据批量导入到数据库表中 这个js不能直接实现吧 我们程序用到 先读取excel内容转换成数组 然后放到页面上 再提交表单 储存 MySql如何批量添加数 ...
- java中char是几个字节_Java中char占用几个字节
在讨论这个问题之前,我们需要先区分unicode和UTF. unicode :统一的字符编号,仅仅提供字符与编号间映射.符号数量在不断增加,已超百万.详细:[https://zh.wikipedia. ...
- java中磁盘和内存的相互,Java:有没有磁盘和内存一样快的情况?
我正在写一些代码来访问inverted index. 我有两个可互换的类,它们对索引执行读操作.一个从磁盘读取索引,缓冲其中的一部分.另一个将索引完全加载到内存中,作为byte [] [](索引大小约 ...
- java.lang类在电脑哪个位置_Java中的java.lang.Class API 详解
且将新火试新茶,诗酒趁年华. 概述 Class是一个位于java.lang包下面的一个类,在Java中每个类实例都有对应的Class对象.类对象是由Java虚拟机(JVM)自动构造的. Class类的 ...
- java arrays.sort() c_正面刚算法-Java中Arrays.sort()(一)
最近一直在看关于排序相关的算法,从O(n²)的冒泡.插入.选择到O(nlog(n))的归并.快排.再到桶排序.计数排序.基数排序.各个算法都有自己的优点和缺点,那么jdk中关于这种底层的算法是怎么实现 ...
最新文章
- Centos 中 TCPWrappers访问控制
- WPF 3D 基础学习 - 相机、裁剪、光线入门(2)
- ElasticSearch API实现CRUD
- Java Annotation(注解)使用教程
- cuda Memory Fence Functions
- G.8032协议 ERPS
- smarty 模板php,Smarty模板快速入门
- 线性代数的本质(Essense Of Linear Algebra)[2]
- jupyter代码字体大小_Jupyter Notebook 更改字体、字体大小、行高
- Spring+Spring MVC+MyBatis实现SSM框架整合详细教程【转】
- MATLAB——更换主题颜色
- 淘宝开发文档AlibcShowParams唤起淘宝的返回小把手
- 10个常用的JS工具库
- [位压] 高精度加法
- ubuntu网络无法连接
- Scrapy爬取动态页面下载图片(以抓取360图片为例)
- 文件管理工具,教你批量删除文件夹原名称并添加编号
- 《流畅的python》1.2 笔记
- 在M1 Mac上编译使用arm64原生go | Gopher Daily (2020.12.15) ʕ◔ϖ◔ʔ
- 从风险评估到应急救援,实景三维为抗震减灾提供精细化决策依据
热门文章
- opc读取ab的plc数据_C#读写 AB PLC 直接通过节点来读写数据 读写 AllenBradley PLC
- python manage.py syncdb Unknown command: 'syncdb'问题解决方法
- mysql中教如何拼接字段(列)值、加入运算、设置别名(非常实用)
- python 过滤文本中的标点符号(转)
- bzoj5324:[Jxoi2018]守卫
- #前端# 解决前端页面滑动不顺畅的问题
- phpcms文件所需权限
- 手机型号识别 手机PID UID 驱动识别 数据库包
- 遍历repeater中的控件的几种方式
- Flash与.NET的通信(三):LoadVars对象的应用