开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
Computer Science
Computer Science

2010 年 10 年前的网文【我的10年计算机之路】

从1999年读大学的到今天,已经差不多10多年了。正所谓十年一眸,为自己写下10年的计算机之路。 1999年,那时候正好也是另外一场风暴,网络经济的爆发和衰退。 很早的时候我就想学计算机,也算是心中的一个梦想,影响我做这个决定的人就是慈云桂了,给我最大支持的就是我的父母。记得那时候还在读小学,听到新闻上有说,国防科大研制出巨型机了。那时候我还不觉得高计算机是高科技,我就觉得如果人的一生也能这么辉煌过就好了。从那个新闻以后我就决定要搞计算机,那时候也小,真不知道什么是计算机。印象最深的是1992年,我妈妈单位进了一批计算机,应该还是8088的CPU吧,还要靠巨大的汉卡才能输入汉字。一下子就觉得这个小铁盒子真神奇。从那个时候对计算机就感觉是一个老朋友一样的了。 随后经历过UCDOS和Win32的时代,那时候正好在高中,也是瞎折腾,要高考,本来吵吵要买计算机的,这个计划被我父母,无限制的推迟到高考以后了。因为我妈妈怕给我买了计算机耽误我的学习,其实我也知道是家里经济条件也不允许买那么奢侈的东西,一台386的微机需要上万RMB呢。但是,我觉得我父母的态度好像也蛮支持我学这个,他们是从事文化艺术工作的,反正感觉对我的决定都很支持的。从1992到1999年,就是东搞一下西搞一下了。我家在学校,很多时候能有这个机会给我去折腾,同时有一小时后的玩伴,比我大4岁,我读高中的时候他就已经考上大学了,也是学计算机的,那时候他就买了一台计算机了。 AT的电源,Windows95的操作系统。看得我正是眼馋呀。 还清楚的记得Windows95 AT电源关机后的一句话:您可以安全的关闭计算机了。橘红色的。呵呵。 这时候没事买去买计算机的报纸看,1块钱,是我有时候自己的零花钱没有用,有一个报纸叫做《计算机世界》不为别的,就是看里面的电脑彩页多,特喜欢看。还知道IBM是搞电脑的,一个IBM的笔记本3万多RMB呢,看得我是滴口水。还有个公司,应该叫Digitial 可惜后来倒闭了。一直也没有用过这个公司的电脑,不过大学的时候,还有几台样机见过。 这个就是我懵懵懂懂小时后计算机的梦吧。 也许人算不如算,1999年我也如愿以偿的考上大学了。 1999年到2003年这几年正好是计算机变革最厉害的几年。什么东西都是新的。我还是很感谢我的父母,他们对我可以说是无尽的支持了。因为,我已经学了计算机了,2000年春节的时候,我就提出想要一个计算机,我爸爸妈妈就问我要什么样的,我其实也不知道。那时候一台台式机也就5000左右,我想那还不如买个笔记本呢。好奢侈的想法,我妈妈也同意了,结果2000年的4月份我就拥有了自己的笔记本。我简直都不敢相信自己的眼睛。联想的昭阳2100E,我感觉我是我们学校里面极少数拥有笔记本的人。其实我家也是普通的工薪阶层,一直到今天,我都觉得我的父母给了我我最大的支持。 1999 到 2003年之间发生了一些事。 泡沫经济的爆发,那时候做网站感觉就是在造富,从网大到亿唐,到中华网。天天到学校里面做广告,让大家上呀什么的。那是的网吧,就好象一夜之间全部冒出来了一样的。从不敢上网,到天天泡网。因为,我用的是拨号上网,拨163或者169,那费用可是十分壮观呀。那时候信息量也不大,看来看去就那个几个网站。说个题外话,那时候国内还没有做防火墙,反正只要上网,就能通。反正都能看,不像现在很多都看不了了。 第一次接触到聊天工具QQ,其实也没有想到QQ会发展成这样。我自己比较鄙视QQ,就是拿着OICQ做了一个汉化而已,也许就是因为这样的成功,造就了 QQ的抄袭文化吧。真正那时候对QQ也不感冒,反正都是聊天了,加的也是认识人。随着用QQ的人慢慢有点多了,大学生本来也就无聊,也就喜欢通过QQ去找网友,见面聊天,顺便干点什么。反正是非异性不加。在那个谎言满天飞的时代,没有人知道QQ能干什么,反正上QQ就情不自禁说假话。我真正感觉拯救了QQ 的,就是珊瑚虫的作者,第一次将对方的IP让你知道了,没有人能无止境的撒谎了,马上环境就纯净了很多,随着QQ的发展,也增加了很多实用的功能。QQ也就演变成现在这个样子了。谁知道,QQ卸磨杀驴,唉。这是后话了,现在的人就是笑贫不笑娼吧。 其实,从学计算机来,一直都在接触网络。计算机硬件方面也就知道而已,反正也就是组装下电脑,这个我还会。我们也接触不到服务器,那知道一个电脑里面还可以放2个CPU?内存能有个256MB,那还没有差不多笑死。软驱是标配,光驱是用来看碟的,显示器是可以纯平的,17吋三星的,那个叫奢侈。内存那时候应该是SDRAM,台湾来个地震内存都涨价。一根256MB的内存,是我1个月生活费。 真正接触软件开发是在大二,大三吧。微软那时候就来我们学校做Visual Studio的推广了。一直都没有怎么用过VC,主要接触的开发工具从Delphi 5, JBuilder, Foxbase, Foxpro什么乱七八糟的试了下。大四的时候,就真正开始接触WEB,因为,我一个朋友她们那时候也开始做Java了。他们老师要做JMX,基于 Java的管理扩展吧。呵呵,什么都不知道,只是感觉从那个时候开始就与Java和web结下了不解之缘,一直到现在吧。 Weblogic从6.0开始,Oracle从8.0开始,就一直在用了,操作系统从Windows98开始就一直在部署这些应用了。到现在还在用XP的操作系统,一直不想换,可能觉得太亲切了吧。 大学4年就这么过来了。 2003年毕业后想着考研,我也知道我考不上,不过还是试试吧。03年就在国内耗了半年,但是也没有回家呆着,就在北京整了一个小蜗居。半年后,自己的钱也花得差不多了,考研看来也没有什么眉目,就想着找找工作吧,能解决点自己的生活问题。就稀里糊涂的找了第一份工作。 2004年初就开始上班了,最开始是做Java的web应用的。第一个公司的老总和项目经理确实给了我不少的帮助,虽然工作起来也没日没夜的,但是感觉还挺充实,那时候知道了还有框架可以用,可以用Hibernate呀什么乱七八糟哦,后来也知道Java程序可以不用从头开始写。 反正也是不清不楚的干了1年,不再满足于现有的工作水平,公司经济状态也不好,有时候还发不出工资。 2005年,学会了点小技术,就和一个副总单独开始做了吧。做了个数据业务,我也觉得现在这部分挺有搞头的,不过技术力量确实也不行,同时没有人帮我,有些想法虽然好,但是也不好实现。那个大哥他也是自己出资自己干,但是不能老亏本呀,亏本做技术也不能长期下去。不过他对我倒是挺好,在亏也没有亏过我。所以我就坚持了下来到了2006年底了。 还好,公司虽小,但是业务比较复杂,也部署过一些中小型应用。终于见过几十万的服务器和磁盘阵列了。 2005年的时候同时也就开始策划来美国读书的事情了,开始申请的学校不给奖学金,2006年的被拒签了2次,也快没有什么信心了,就懒得想多了。想差不多就和大家一样算了。在国内继续工作,买房养家糊口吧。谁知道,在07年的时候,拿到了全额奖学金,就酝酿着再试试吧。谁知道还挺顺利的,2007年夏天的时候就拿到了来美国的签证了。 2007年就来到美国了,在美国混了几年,混了个硕士。平时没事的时候就做做程序,看看书,有时候也兼职下,去做点咨询工作。美国移民法也很严格,也不敢做违法的事情,有时候做了也不计较报酬吧。因为很多公司都有实际业务,也不是纯软件的公司,反正就用到什么学什么了。就这么稀里糊涂到了2010年了。 2008年,一朋友找到我说要做电子商务,那是没有办法,就赶鸭子上架成立了公司,弄起了PHP,本来我一直是做Java的,反正闲着也是闲着,有做比没有做好。我们就架设了一个电子商务网站,开始卖起东西来了。有点订单,但是订单也不多。就想着这样架着吧,有时间再改改。 这就是我这10年,不算精彩,但是也算凑合吧。 不是真正的程序员,但是也做过不少。我很多朋友都在做程序,写代码,做调试,看起来都挺忙,也不见他们怎么上网的。 后来想吧,虽然我们是搞计算机的,但是平时我们应该也有点爱好,06年的时候,爸爸妈妈一直催我做一个个人网站,我也不知道要做成什么样的,那时候工作也忙,就耽搁了下来。一直到来美国读书了,反正闲暇的时间也多了,就利用这个机会,架设了几个开源的网站。我爸爸、妈妈他们是搞文学和艺术的,和我的完全不靠边,我就给他们做了一个论坛,我就把计算技术这个拆分出来了。 平时也遇到了很多问题,想想留下来给自己备忘也好,给别人参考也好。就慢慢积累。 从我开始做计算机开始,我就知道很多东西不知道是别人不知道呢还是不愿意让人知道,反正去论坛看很多东西都稀里糊涂的,也说不太清楚,看了等于没有看。很多所谓的专家,说起来挺好,但是好像也解决不了实际问题。所以我就想,在我网站上面,一定要翔实,自己也好查,别人也能看得明白。我一直相信奉献的比索取的人多,好人比坏人多。不管怎么样,如果我能帮你减少学习的时间和难度,你说一声我们做的这些东西,真正有用,我就心满意足了。 开始也想靠这个网站赚钱什么的,后来想了下,反正也赚不到几个,不要给自己搞得太商人了。赚钱还有别的很多办法,实在不行了,我给别的公司打工去。只要,有一天有人发现我做了一个有用的事情。我就很满足了。 从接触计算机这10年,有过欢喜,有过忧愁。更多的也许是快乐和战胜困难的喜悦吧。 我不喜欢拿曾经做过什么项目来炫耀,因为不管怎么样,那些都是历史也是过去,随着一个版本的推出,过去再辉煌也仅仅证明过是过去了。只是觉得,曾经做过的是经验,正是这些经验,教会了我们思考的方式。 呵呵,一个是不完美的10年,但是,也算是充实的10年,执着,热爱的10年。

2020年03月05日 0Comments 834Browse 0Like Read more
Computer Science

IntelliJ 的搜索和全局搜索怎么用

要在 IntelliJ 中进行搜索,我们最常想到的就是 Ctrl + F。 其实这个快捷键在 IntelliJ 中是在当前打开的文本中进行搜索,如果我们希望进行全局搜索应该怎么用呢?文档其实都很多,但是真正能够说明白的其实不是非常多。 双击 shift 单击 shift 2 次,你将会看到打开的搜索界面。 如果你尝试搜索文字的时候,你可能会发现,如果你需要的内容在代码里面,这个搜索没有任何显示结果。 你只需要注意: 双击 Shift 的搜索界面只会搜索名字。这个名字包括有文件名,操作的名字等。 如果你有字符串在文件内,这个搜索是搜不到。但是非常好用的是,你可以用这个搜索来搜索 IntelliJ 的快捷键。 例如,你可以输入 push 然后搜索, 你可以看到界面中会显示 push 的快捷键。 Ctrl + Shift + F 这个就是我们常用的全文搜索了。 例如,你有一个 Spring 的项目,你希望在项目中找到所有 @SpringBootApplication 的文件。 这个就是等于在项目的所有文件中搜索文件中的内容,找到符合的文字。 你可以对搜索的内容有些过滤,比如说只搜索特定的文件扩展名等。 这个就是全文搜索了。 请注意不要和双击 Shift 混淆了,搜索的内容不一样。 这个是我们在使用 IntelliJ 中比较容易搞乱的地方。 Ctrl + F 这个就非常简单了, 只是在文件中进行搜索,查找等。 这个只针对你当前打开的文件有效。 这个将会在当前打开的文件编辑器上面进行显示。 如何显示全文查找对话框 如果你不知道全文查找对话框的快捷键是 Ctrl + Shift + F。 你可以有下面 2 种办法打开这个对话框或者找到显示这个对话框的快捷键。 双击 Shift 后输入查找字符 Find In Path 这个就会告诉哦你全文查找对话框显示的快捷键。 从菜单进入 你也可以从菜单中选择通过下面的路径进入打开全文查找对话框。 选择 Edit > Find > Find In Path   https://www.cwiki.us/questions/57934421

2020年03月01日 0Comments 891Browse 0Like Read more
Computer Science

Spring Data 的 Pivotal GemFire 参考指南前言

Spring Data 针对 Pivotal GemFire 关注整合强大的 Spring 框架的能力,无创编程模型和使用 Pivotal GemFire 数据管理方案的 GemFire 的概念来集成和简化配置,开发 Java 应用程序。 本文档假定你已经对 Spring Framework 和 Pivotal GemFire 的概念有了些基本的了解。 我们将会尽力保证这个文档的完整和正确。但是还会有一些主题和概念可能需要更进一步的解释和说明(例如,使用 HA 分区的数据分布管理平台依然会妨碍数据完整性)。 另外本文档中可能还会有一些排版的错误。如果你发现本文档中的一些错误甚至是一些更加严重的问,请告诉 Spring Data 项目组。你可以通过在 Spring Data JIRA 中来创建问题让项目组了解到。 https://www.cwiki.us/display/SpringDataZH/Spring+Data+for+Pivotal+GemFire+Reference+Guide

2020年03月01日 0Comments 871Browse 0Like Read more
Computer Science

IntelliJ 如何找到项目中 Deprecated 的方法

在一个项目中,如果我们标记了某些元素为 Deprecated 的话,如何让我们能够快速找到? 简单来说,你可以对项目进行 Code Inspection。 选择 Analyze > Inspect Code 在弹出的对话框中,对整个项目进行代码分析。 在分析的结果中,你就可以看到那些类,或者方法,或者字段被 Deprecated  了。   https://www.cwiki.us/questions/57934341

2020年02月27日 0Comments 1049Browse 0Like Read more
Computer Science

Java @Deprecated Annotation(注解)

在本部分的快速指南中,我们将会查看 Java 的 deprecated API 和如何在程序中使用 @Deprecated 注解。 @Deprecated Annotation(注解) 作为程序的进化和迭代,随着时间的推移,在项目中总会有些类,构造方法,字段,类型或者方法不建议人们继续继续使用。 为了避免程序向后兼容的问题,而导致程序或者 API 不能使用,我们将会对不再使用的元素使用 @Deprecate 注解来声明。 @Deprecated 主要目的是告诉其他的开发者标记的元素不要在程序中继续使用了。 同时我们还建议在 @Deprecated 注解后面添加一些说明的文本来解释如果希望程序或者 API 具有相同的功能应该使用何种其他的方法。 SRC https://github.com/cwiki-us-demo/java-tutorials/blob/master/core-java-modules/core-java-annotations/src/main/java/com/ossez/annotations/ClassWithDeprecatedMethod.java package com.ossez.annotations; public class ClassWithDeprecatedMethod { /** * Calculate period between versions * * @deprecated * * This method is no longer acceptable to compute time between versions. * * <p> Use {@link ClassWithDeprecatedMethod#updatedMethod()} instead. */ @Deprecated public static void deprecatedMethod() { } /** * Updated Method instead of deprecatedMethod. */ public static void updatedMethod() { } }   请注意,如果一个 Java  的元素被声明了,但是又在程序或者项目的其他地方被引用的话,编译器将会显示丢弃(deprecated)API 的警告。 在上面的示例代码中,如果 deprecatedMethod 被调用了,只有调用 deprecatedMethod 这个方法显示丢弃的警告。 同时请注意,通过使用 Javadoc @deprecate 标记,我们将会在 Java 文档中也被标记丢弃。 上面的代码,如果在 IDE 中查看文本,将会显示为如下: Java 9 添加的可选属性 针对 Java 9 的 @Deprecated 注解,还添加了 since 和 forRemoval 属性。 since - 接受字符串的输入参数,用于定义我们丢弃的内容从哪个版本开始。默认为空字符串。 forRemoval  - 使用布尔(boolean)类型,用于标记我们丢弃的内容是不是从下一个发行的版本就会被删除。默认为 false。 如下面的代码中对上面属性的定义。需要注意的是,这个功能最低的版本为 Java 9,如果你还在使用 Java 8 的话,是不能被支持的,将会出现编译错误。 /** * Calculate period between versions * * @deprecated * * This method is no longer acceptable to compute time between versions. * * <p> Use {@link ClassWithDeprecatedMethod#updatedMethod()} instead. */ @Deprecated(since = "4.5", forRemoval = true) public static void deprecatedMethod() { }   上面的内容表示的是 deprecatedMethod 方法是从版本 4.5 开始准备丢弃的,同时已经计划在下一个主要的发行版本中完全丢弃删除。 通过添加上面的内容,如果我们现在还在尝试使用这个方法的话,将会通知编译器给我们一个非常强烈的警告。 同时,当前的主流 IDE 工具也能够明显的显示上面强提示。例如在 IntelliJ 中,删除线将会使用一个红色的删除线来替代当前使用的黑色删除线。 结论 在这个快速文章中,我们看到了如何使用 @Deprecated 声明来标记不再使用的元素,以及针对 Java 9 我们可以为其设置一些其他的属性以及这些属性的默认值。 完整的代码,请参考  GitHub 中的项目,可能项目中的源代码和文章中使用的代码有所不同,请以 GitHub 中的代码为主。 代码和内容的完整链接为:https://www.cwiki.us/display/JAVAZH/Java+@Deprecated+Annotation

2020年02月26日 0Comments 1108Browse 0Like Read more
Computer Science

Java 项目编译错误 Error:java: java.lang.ExceptionInInitializer

错误提示信息为: Error:java: java.lang.ExceptionInInitializerError com.sun.tools.javac.code.TypeTags     如果使用 Maven 错误信息是一样的。 [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.449 s [INFO] Finished at: 2020-02-26T08:34:45-05:00 [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project core-java-annotations: Fatal error compiling: java.lang.ExceptionInInitializerError: com.sun.tools.javac.code.TypeTags -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException     请问这是什么原因呢?   这个可能原因是你编译器的环境使用过高。但是你的依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.6.12</version> <scope>provided</scope> </dependency> 过低导致的。 可以解决的办法是将你的编译 JDK 降到 1.8。 或者将 org.projectlombok 升级到最新的版本。 例如我们在 IntelliJ 中,使用 1.8 编译代码,就没有错误。   https://www.cwiki.us/display/JAVAZH/questions/57934274/answers/57934279

2020年02月26日 0Comments 1119Browse 0Like Read more
Computer Science

IntelliJ 更改项目使用的 JDK 版本

在当前使用的 IntelliJ 中的 JDK 版本为 1.8,如何修改 IntelliJ 使用的 JDK 版本为 1.11 呢? 你可以在 IntelliJ 中进行修改。 选择 File 后,然后选择 Project Structure 然后需要在你的项目结构中首先安装不同的 JDK 版本。 选择项目(Project)后选择不同的 JDK 和不同的编译级别。 然后刷新你的项目在进行编译的时候,你会发现你的 IntelliJ 已经使用设置的新 JDK 版本进行编译项目了。   请参考链接有关具体的问答内容:IntelliJ 更改项目使用的 JDK 版本

2020年02月26日 0Comments 872Browse 0Like Read more
Computer Science

Java BigDecimal 如何去掉末尾多余的 0

Java BigDecimal 如何去掉末尾多余的 0 呢?   BigDecimal 原生提供了stripTrailingZeros() 方法可以实现去掉末尾的 0。 如果你在这里直接使用 然后使用 toString() 将会转换为科学计数法输出。 考察下面的代码: 你可以访问 https://github.com/cwiki-us-demo/java-tutorials/blob/master/java-numbers/src/test/java/com/ossez/maths/BigDecimalDemoUnitTest.java 访问源代码。 /** * To StripTrailingZeros */ @Test public void bigDecimalStripTrailingZerosTest() { BigDecimal bigNumber = new BigDecimal("2707000000000"); // apply StripTrailingZeros function logger.info("{}", bigNumber.toString()); logger.info("{}", bigNumber.stripTrailingZeros().toString()); logger.info("{}", bigNumber.stripTrailingZeros().toPlainString()); }   上面的代码将会输出下面的内容: 2020/02/25 14:00:19.271 [main] INFO c.ossez.maths.BigDecimalDemoUnitTest - 2707000000000 2020/02/25 14:00:19.275 [main] INFO c.ossez.maths.BigDecimalDemoUnitTest - 2.707E+12 2020/02/25 14:00:19.275 [main] INFO c.ossez.maths.BigDecimalDemoUnitTest - 2707000000000 stripTrailingZeros(),将会转换为科学计数法输出,如果你不希望用科学计数法输出的话,那么你可以使用 toPlainString() 进行全字符输出。

2020年02月25日 0Comments 1028Browse 0Like Read more
Computer Science

Java BigDecimal toString() 的转换和输出

BigDecimal 的 toString() 方法将会把 BigDecimal 通过字符串的方式输出。这个方法将会在必要的时候使用指数进行输出。 具体的转换步骤是按照下面的步骤进行转换的: BigDecimal的非标度值的绝对值用字符'0'到'9',没有被转换为一个字符串基地10零(除非它的值是零,在这种情况下,一个单一的'0'字符被使用)。 接下来,计算调整的指数;这是无效的标度,加上字符的转换的标度值,减1的次数。也就是说,-scale+(ulength-1),其中ulength是十进制数字(其精度)的非标度值的绝对值的长度。 如果该比例大于或等于零,并且调整的指数大于或等于-6,该号码将被转换为字符的形式,而无需使用指数表示法。 在这种情况下,如果该比例是零,则没有小数点被添加和如果规模正小数点将被插入的规模指定的字符数的小数点的右边。 '0'字符添加到转换的非标度值的左侧是必要的。如果前面没有字符,小数点这个插入之后再传统的'0'字符作为前缀。 否则(即,如果该比例是负的,或经调整的指数小于-6),该号码将被采用指数表示法转换为字符形式。在这种情况下,如果转换后的BigInteger有一个以上的位小数点第一位数字后插入。 在字符形式的指数,然后后缀转换非标度值(也许插入小数点);这包含字母“E”后面立刻被调整的指数转换为字符形式。 后者的基数为十,使用字符'0'到'9',没有前导零,并且总是由前缀符号字符' - '(' u002D'),如果调整后的指数为负数,否则为'+'(' u002B')。 ' - '最后,整个字符串由一个减号字符的前缀(' u002D')如果非标度值小于零。如果非标度值为零或正数无符号字符作为前缀。 不使用科学计数法将 BigDecimal 转换为 String SRC 请参考 GitHub 上的源码代码中 bigDecimalWithoutScientificNotationTest():方法 https://github.com/cwiki-us-demo/java-tutorials/blob/master/java-numbers/src/test/java/com/ossez/maths/BigDecimalDemoUnitTest.java /** * To String without ScientificNotation */ @Test public void bigDecimalWithoutScientificNotationTest() { String input = RandomStringUtils.randomNumeric(12) + "12345678901234567" + "8901234567890123" + "4567890123456789" + "0123456789012345" + "6789012345678901" + "2345678901234567" + "8901234567890123" + "4567890123456789" + "0123456789012345" + "6789012345678901" + "2345678901234567" + "8901234567890123" + "4567890123456789" + "0123456789012345" + "6789012345678901" + "2345678901234567" + "8901234567890123" + "4554324324362432" + "7674637264783264" + "7832678463726478" + "3264736274673864" + "7364732463546354" + "6354632564532645" + "6325463546536453" + "6546325463546534" + "6325465345326456" + "4635463263453264"; // Converting to BigDecimal BigDecimal bigNumber = new BigDecimal(input); // Apply toString() method String numberStr = bigNumber.toString(); // Print the result logger.info("{}", numberStr); }     OUTPUT 程序最后的输出如下,将会输出转换后的字符串。 2020/02/25 09:43:29.595 [main] INFO c.ossez.maths.BigDecimalDemoUnitTest - 1503277200971234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234554324324362432767463726478326478326784637264783264736274673864736473246354635463546325645326456325463546536453654632546354653463254653453264564635463263453264 使用科学计数法将 BigDecimal 转换为 String SRC 请参考 GitHub 上的源码代码中 bigDecimalScientificNotation():方法 https://github.com/cwiki-us-demo/java-tutorials/blob/master/java-numbers/src/test/java/com/ossez/maths/BigDecimalDemoUnitTest.java /** * To String with ScientificNotation */ @Test public void bigDecimalScientificNotation() { // Create a BigDecimal object BigDecimal bigNumber; // Create a String object String numberStr; // Set precision to 5 MathContext mc = new MathContext(6); bigNumber = new BigDecimal(RandomStringUtils.randomNumeric(10)+"E5", mc); // apply toString() method logger.info("{}", bigNumber.toString()); logger.info("{}", bigNumber.toEngineeringString()); logger.info("{}", bigNumber.toPlainString()); }   OUTPUT 程序最后的输出如下,将会输出转换后的字符串。 2020/02/25 10:00:50.909 [main] INFO c.ossez.maths.BigDecimalDemoUnitTest - 8.31198E+14 2020/02/25 10:00:50.912 [main] INFO c.ossez.maths.BigDecimalDemoUnitTest - 831.198E+12 2020/02/25 10:00:50.912 [main] INFO c.ossez.maths.BigDecimalDemoUnitTest - 831198000000000 BigDecimal类有3个 toString 方法,分别是 toString()、 toEngineeringString() 、toPlainString(). 从 BigDecimal 的注释中可以看到这3个方法的区别: toString() - 在必要的时候使用科学计数法 toEngineeringString() 在必要的时候使用工程计数法。类似于科学计数法,只不过指数的幂都是3的倍数,这样方便工程上的应用,因为在很多单位转换的时候都是10^3 toPlainString() - 不使用任何科学计数法。 不使用指数 科学计数法 工程计数法 2700 2.7 × 10³ 2.7 × 10³ 27000 2.7 × 10⁴ 27 × 10³ 270000 2.7 ×…

2020年02月25日 0Comments 921Browse 1Like Read more
Computer Science

Java 定义一个日志的时候应该如何定义

在很多情况下,我们都会使用 SLF4J 来定义日志。 那么如何定义一个 Logger 呢?   相信绝大部分人都会定义为: private static final Logger logger = LoggerFactory.getLogger(BigDecimalDemoUnitTest.class); 但是我们为什么要使用 private static final 来进行修饰呢? private - 没有其他类可以劫持你的日志 static - 因为使用了静态,所以每一个类就只有一个日志,同时可以避免尝试序列化日志 final - 在类的生命周期中,不需要修改日志 同时,你可以定义变量 log 来替代 logger,这样能够减少输入的字符数。当然这个也需要根据你的项目要求来定了。 当然还有下面的一种情况,考察日志代码: protected final Logger log = LoggerFactory.getLogger(getClass()); 上面有关日志的定义与我们的规则是完全相反的。 上面的代码允许你在所有具有继承关系的类中使用相同的日志名(与实际的类名相同)。 例如: 如果类 Bar Extends Foo,那么上面 2 个类的日志将会 log 到 Bar logger 中。

2020年02月25日 0Comments 1069Browse 0Like Read more
1…156157158159160…239
Archives
  • September 2026
  • August 2026
  • July 2026
  • June 2026
  • May 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,388)
    • Confluence (663)
    • Gradle (12)
  • U.S. (571)
  • 文化旅游 (146)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1