java 里大于且小于_java-浮点数大于或小于零
我有以下代码,有时返回为true,有时不返回.
任何想法可能导致变化的结果吗?
0.00字符串来自JSON对象.
(代码简化)
if(new Float("0.00")>0){
// do something
}
编辑:
我有一些浮点数,我想确定它是否为零,小于零或大于零.值可以是0.00、0.001或-0.001之类的值.如何确定它们是正数,负数还是零?
编辑:
也许我应该澄清我如何获得价值观.我可能完全是其他导致问题的原因,因为我阅读了有关BigDecimal的内容,并尝试无济于事.
使用以下代码从JSON feed(格式为LT:0.000)中提取值:
price = new BigDecimal(stocksJSONArray.getJSONObject(i).getString("LT"));
然后,为了测试价格是大于还是小于零,我使用了以下条件语句:
if(price.compareTo(BigDecimal.ZERO)==1){
// greater than zero
}
else if(price.compareTo(BigDecimal.ZERO)==-1){
// less than zero
}
对于从JSON提要中读取的许多值,此代码将循环执行.从结果中可以看出,一些零价格被处理为大于零,而某些价格被处理为小于零.我怀疑其他原因导致了这里的问题?
我还进行了测试,以查看问题是否出在数据的准确性上.所以我这样做:
DecimalFormat frmt = new DecimalFormat("0.000000000000000000000000");
String formatted = frmt.format(stock.change);
对于被识别为正数和负数的零,其跟踪值仍为0.000000000000000000000000,而不是0.000000000000000000000001或类似的值.
解决方法:
您的表达式将在Java中可靠地产生false的结果.
但是,假设零是例如-1除以加无穷大的结果.在这种情况下,它内部将表示为-0.00.在某些情况下,它仍将打印为零(无负号),而在其他情况下,其行为将不同于0.00.
浮点数通常可以用小于-的方式与整数进行比较-存在四舍五入误差的风险,但是通过添加或减去一个随机的小值无济于事.与平等比较有所不同.
我建议您仔细检查有关浮点行为的事实和do more reading.
编辑:我在上面大大简化了回答原始问题.为了回答对该问题的编辑,我们需要更深入地研究.
对于浮点数的任何运算,应该知道并考虑输入的精度和准确度以及所需的输出精度.有时任务可以解决,有时却不能解决-输入精度可能不足以产生答案.
在您的情况下,精度为32位,其中尾数为24位,指数为8位.这意味着该数据类型可以将0.00100001与0.001区别开来,而与0.001000001区别开来,您可以很容易地看到:
System.out.println((float)0.001 < (float)0.001000001);
(请注意,如果不通过强制转换进行单精度比较,则会得到不同的结果.在这种情况下,计算将以双精度进行,并且可以安全地区分数字,直到将它们拉近为止.)
因此,精度取决于数据类型.不太准确.确定输入精度通常要比精度更具挑战性,因为它与数据类型无关,只是精度永远不会比精度好.
关于特定浮点类型的可表示性,数学实数可以在四种可能的情况下找到自己的位置,它们对应于以人类可读的十进制表示形式以字面值出现时所接受的不同处理.
>可以用二进制准确表示.例如,0或0.25.然后,它与整数变量中的整数一样准确.
>或可以近似表示,其精度与类型的精度相对应.例如1/3或0.1或0.001.当所需的指数适合可用的指数位数时,但是当该数字的二进制扩展数长于尾数或完全无穷大时,就会发生这种情况.
>或近似可表示,且准确性严重失真.这些是denormal(非正常)数字.这不仅是不准确的,而且它的算术运算可能会减慢到爬网的速度,这通常被记录为正确的行为,即使是受人尊敬的Java编译器,在看到这种类型的文字(可能是bug)时也会冒汗.
>否则根本就不合适,编译器会拒绝该字面量太大.
因此,在您的情况下,我们只有三个有效的输入:0(准确),0.001(近似)和-0.001(近似),这可以解决您的问题.只需将您的数字与0文字(顺便说一句是准确的)进行比较,您将始终获得期望的布尔值(完全准确的输出).
但是,这取决于您的输入是直接从文字中派生的.如果您输入的值是0.001,-0.001和(float)1000 *(float)0.001-1之一,那么这将是一个不同的问题,您将必须获得答案,例如:
if (-0.00001 < x && x < 0.00001) // then x is zero
而且,如果您允许任何输入,而不仅仅是这三个魔术值,并且不知道输入的准确性,那么这就是不可能的任务.即使是从0.000000000 …开始的文字,最后还有一些垃圾数字也将被Java编译器转换为完全中性的零,在这种情况发生之后,再也没有任何Java代码会从准确和美观的角度告诉它0.00,或者如果您在下溢值上添加减号,会发生什么.它是变量中所有相同的,不准确的零,相同的位模式,而不是3个不同的值.
标签:java,android
来源: https://codeday.me/bug/20191101/1983248.html
java 里大于且小于_java-浮点数大于或小于零相关推荐
- java里正数和负数_Java程序检查数字是正数还是负数
Java程序检查数字是正数还是负数 在该程序中,您将学习检查给定的数字是正数还是负数.这是通过在Java中使用if else语句完成的. 示例:使用if else检查数字是正数还是负数 public ...
- java里包含怎么算_java中怎么判断一个字符串中包含某个字符或字符串
展开全部 /*这是一62616964757a686964616fe58685e5aeb931333363393630个静态函数,不用声明对象就可以用的,如你的类名为Test,在任何情况下都可以调用Te ...
- Java里format什么意思_java String.Format详解
JDK1.5中,String类新增了一个很有用的静态方法String.format(): format(Locale l, String format, Object... args) 使用指定的语言 ...
- java里冒泡排序编程案例_java编程题:用Java实现一个冒泡排序算法
/** * java编程题:用Java实现一个冒泡排序算法 */ public class Test12 { public static void main(String[] args) { int[ ...
- 往java里输入坐标值_java.让用户输入x坐标,和y坐标。当用户输入完x坐标(比如200),敲enter,...
展开全部 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JBu ...
- java里有哪些对象_Java中创建对象的方式有哪些
创建对象的几种方式: 1.这是最常用的方法:通过new 创建对象.这种方法需要用到构造器.Demo demo1=new Demo(); Demo demo2=new Demo(1,"有参构造 ...
- java里有位移吗_Java 中位移运算符 ,,
Java 中的三种位移运算符 java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : ...
- java里异常名词解释_java名词解释
Abstract class 抽象类:抽象类是不答应实例化的类,因此一般它需要被进行扩展继续. Abstract method 抽象方法:抽象方法即不包含任何功能代码的方法. Access modif ...
- java里获取当前月份_Java如何获取当前月份的名称?
要从系统获取当前月份的名称,我们可以使用java.util.Calendarclass.Calendar.get(Calendar.MONTH)从0开始的第一个月和11作为上月的整数返回月份的值.这意 ...
- java里Math求倒数_java倒数60s实现
在JAVA程序中添加一个能倒数的类 import java.util.Timer; import java.util.TimerTask; import javax.swing.JLabel; imp ...
最新文章
- 自然语言推理:使用注意力机制
- 分子生物学之蛋白质与氨基酸
- linux powerdns服务器搭建,开源DNS服务器 PowerDNS
- boost::mpl模块实现upper_bound相关的测试程序
- 曼彻斯特编码_两种编码方式以及两种帧结构
- 8款JVM性能调优监控工具(提高开发效率)
- HDU2594 Simpsons’ Hidden Talents 前缀与后缀转化成用s1去匹配s2
- 群体智能优化算法之总结
- 实用:AE/PR 视频交换格式哪家强?
- Kafka的消息可靠性(防止消息丢失)
- 中国社会为何多犬儒?
- 关于Win10资源管理器总是崩溃的问题解决方案
- excel浏览器直接下载
- 网站备案必须有服务器吗,域名备案必须有服务器吗
- ctfshow菜狗杯webshell wp
- [Mac 硬件相关] Mac日常拆卸及相关维护(更换电池/清风扇/更换硅脂)
- 如何在Python中加速信号处理
- 页面结构图示例图_定义示例站点的页面结构
- 如何挣更多钱呢?提高你的编程艺术!
- java什么是classpath_Java 基础 - CLASSPATH 到底是什么