本文目录
Excel中,怎样判断单元格中的数字是文本格式还是数值格式
首先感谢悟空问答邀请小小筱回答这个问题!
在Excel中,怎样判断单元格中的数字是文本格式还是数值格式?依靠小编多年的经验,这里总结了6种方法可以快速判断是文本格式还是数值格式!
方法一:看单元格数值的对齐方式。
技巧:若单元格里面的数值为右对齐,则为数值格式;若单元格里面的数值为左对齐,则为文本格式。如下图所示。
方法二:看单元格数值是否可以参与计算。
技巧:数值格式可以直接参与计算,文本格式则需经过进行数值处理后才可以参与计算。如下图所示。
方法三:看单元格左上角是否有绿色小三角的提示符。
技巧:如果单元格左上角有绿色小三角的提示符,则为文本格式;如果没有,则为数值格式。如下图所示。
方法四:看单元格数值前面是否有单引号。
技巧:选中数值单元格,如果数值前面没有单引号,则为数值格式;如果数值前面有英文的单引号,则为文本格式。
方法五:使用ISTEXT函数判断是否是文本。
技巧:在单元格中输入函数公式‘=IF(ISTEXT(B5),“是文本“,“不是文本“)’也可以只用=ISTEXT(B5)来判断,如果是文本,则返回TRUE,否则返回FALSE。如下图所示。
方法六:使用函数公式“=ISNUMBER(B5)“判断是否是数字。
技巧:如果是数字,则返回TRUE;否则返回FALSE。如下图所示。
如果您喜欢本回答,请多多关注、转发与点赞!
您的关注、转发、评论、点赞、收藏都是对小编的鼓励与支持,谢谢您!
为什么使用Java的SimpleDateFormat偶尔出现值不正确的情况
我将从以下几点进行说明:
1、SimpleDateFormat的使用
2、为什么SimpleDateFormat线程不安全呢?
3、怎样解决SimpleDateFormat的线程不安全对象
4、总结
SimpleDateFormat的使用
我们通常都会写一个日期处理工具类DateUtils,使用时直接使用这个实例来进行操作。代码如下:
那么怎么使用呢?
DateUtils.parseString(“2020-05-01 10:02:02“)
上述代码的调用,在大部分的时间里都会工作的很好,但是当你的项目并发比较高的时候,问题就出来了,比如转化的时间不正确,比如报错,线程挂死。我们看下下面案例:
执行输入如下:
报java.lang.NumberFormatException: multiple points错误,直接挂死,没起来;
还有下面问题:我们只是解析 2020-05-01 10:02:02,下面输出结果却是各种各样的结果。
为什么SimpleDateFormat线程不安全呢?
我们先按下JDK中是怎样介绍SimpleDateFormat类的。
Date formats are not synchronized.
* It is recommended to create separate format instances for each thread.
* If multiple threads access a format concurrently, it must be synchronized
Date formats 是线程不安全的。推荐为每个线程创建单独的format实例。如果多线程并发访问同一个format实例,必须加同步操作。
那下面我们分析源码来说明为什么线程不安全?
因为我们在工具类中把SimpleDateFormat定义为静态变量,那么在多线程环境下SimpleDateFormat就会被多线程共享,B线程会读取到A线程的时间,就会出现时间差异和其他问题。
那我们来看parse做了什么?
从上面代码看(3)(4)(5) 操作不是原子性,当多个线程调用parse方法适合,比如A执行了(3)(4),也就是设置了cal对象,在执行代码(5) 前线程B 执行了代码(3) 清空了cal对象,由于多个线程使用的是一个cal对象,所以线程A执行(5) 的时候返回的是被线程B清空后的对象
怎样解决SimpleDateFormat的线程不安全对象
(1) 每次使用时new一个SimpleDateFormat 的 实例,这样可以保证每个实例使用自己的Calendar实例,但是每次使用都需要new一个对象,并且使用后由于没有其他引用,又需要回收,开销会很大。
(2) 可以使用synchronized 对SimpleDtaFormat实例进行同步
(3) 使用ThreadLocal,这样每个线程只需要使用一个SimpleDateFormate实例,这相比第一种方式 节省了对象的创建销毁开销,并且不需要使多个线程同步。
(4) 使用JDK8中的 DateTimeFormatter
上面说明此类是线程安全的。
总结
SimpleDateFormat 是线程不安全的类,一般不要定义为 static 变量,如果定义为 static ,
必须加锁,或者使用 DateUtils 工具类。
正例:注意线程安全,使用 DateUtils。亦推荐如下处理:
说明:如果是 JDK8 的应用,可以使用 Instant 代替 Date,LocalDateTime 代替 Calendar,
DateTimeFormatter 代替 SimpleDateFormat,官方给出的解释:simple beautiful strong immutable thread-safe。