(转载自玄影池扁舟)

做java项目的时候可能经常会遇到double类型变量保留小数的问题,下面便把我的经验做个简短的总结:

java中double类型变量保留小数问题大体分两种情况:

(一):小数点后面位数过长,四舍五入保留指定位数:

可以用以下代码实现:

public class TestDemo {
 public static void main(String[] args) {
     double a=15.32743859;
     double b=Math.round(a*10000)/10000.0000;//保留四位小数
     System.out.println(b); 
 }
}

想保留n位小数,就Math.round(a*10的n次方)/10的n次方.n个0。

(二):如果小数点后末位为0,myeclipse中不予显示,如

double a=15.80;
      System.out.print(a);

则在控制台中输出的结果是15.8。

而我们有时候希望把百分位的0也显示出来,比如说显示商品价格,一般是显示两位小数,如果商品价格是15.8,也显示为15.80,如果商品价格是15,也显示为15.00,这种情况,用(一)中的方法便无法实现了,那应该如何实现呢?

请看下面代码:

import java.text.DecimalFormat;

public class TestDemo {
 public static void main(String[] args) {
  DecimalFormat df =new DecimalFormat("#####0.00");
     double a=15;
     System.out.println(df.format(a)); 
 }
}

这样,即使在我们的double类型变量是15,显示出来的也是15.00。当然,我们希望显示多少位就在"#####0.00"的点后面去控制0的个数便可以。如果是"#####0"的话,那我们的double变量无论是15.0或是15.00都能显示成15,而如果我们的double变量是15.60,则显示为16,即这种方法也可以实现四舍五入。它包含了(一)的功能,所以我们遇到两种情况都可以选择这种方法。

后记:我在做u1项目超市收银管理系统的时候便遇到了这个问题。在后期的测试完善阶段,我发现出现项目中商品价格的地方一般都显示为一位小数,而实际生活中一般是保留两位小数。于是乎苦心修改:不断调整xml中的数值、给double变量赋初值0.00、用Math.round()......等等等等,不胜枚举,都没有达到预期的效果,弄得自己丈二和尚摸不着头脑。老师的“进行特殊处理”的关键提示指引着我继续寻找问题的答案,花了大半天的时间才解决。说起来本周都成了"bug"周了,各种不顺,各种调试,真是举步维艰。然而尽管如此,我还是相信:不要怕错误,不要怕问题,要在痛苦解决问题的过程中增加经验值。柳暗花明也许就在山穷水尽之后。

java中double变量保留小数问题的更多相关文章

  1. Java中double变量精确到小数点后几(2)位

    import java.math.BigDecimal; import java.text.NumberFormat; public class Java中double类型的数据精确到小数点后两位 { ...

  2. Java中double类型的数据精确到小数点后两位

    Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585;BigDecimal b = new BigDecimal(f); d ...

  3. Java中的变量与变量的作用域

    关于Java中的变量及变量的作用域 关于Java中的变量及变量的作用域 0. 变量的概念 在程序运行期间,系统可以为程序分配一块内存单元,用来存储各种类型的数据.系统分配的内存单元要使用一个标记符来标 ...

  4. java中的变量和数据类型

    变量和javascript的变量含义一样 在Java中,变量分为两种:基本类型的变量和引用类型的变量.(javascript中同样是这样的) 基本数据类型 基本数据类型是CPU可以直接进行运算的类型. ...

  5. java中打印变量地址

    在java中打印变量的地址 这个代码是在startoverflow上看到的,跟大家分享一下. import sun.misc.Unsafe; import java.lang.reflect.Fiel ...

  6. java中static变量和方法的总结

    转自:http://blog.csdn.net/haobo920/article/details/5921621 java中static变量和方法的总结 java中一切皆是对象 一个类中对象的定义一般 ...

  7. Java中静态变量与实例变量

    知识回顾 上一篇总结了java中成员变量和局部变量的区别,这一篇将总结静态变量和实例变量的一些特性和区别. 示例代码 package Variable; public class VariableDe ...

  8. Java中关于变量的几种情况

    Java中关于变量的几种情况 1.继承时变量的引用关系 class Animals { int age = 10; void enjoy() { System.out.println("An ...

  9. Java中静态变量的声明位置

    Java中静态变量只能是成员变量,局部方法中的局部变量除final外不能有任何其他修饰符,例如: public class Test { static String x = "1" ...

随机推荐

  1. Qt链接网站SLOT

    void BottomToolWidget::openLink() { QString link = "http://www.baidu.com";//在.h中添加slot声明,在 ...

  2. 一步一步学WebSocket(二) 使用SuperWebSocket实现自己的服务端

    上一篇文章,我们了解了客户端如何与服务器创建WebSocket连接.但是一个巴掌拍不响,既然是通信,就必然最少要有两个端.今天我们来看看c#如何用已有的框架实现一个WebSocket服务端. 在.Ne ...

  3. javascript [object,Object]

    今天给html标签的属性赋值为对象时,发现取出来的值为 [object,Object],感觉有点奇怪. 代码如下: <!DOCTYPE html> <html> <hea ...

  4. python学习文章

    推荐大家看看,这几个涉及到解决问题了 用机器学习算法解决问题(图文+程序) http://www.bida.org.cn/index.php?qa=7 数据的价值是提升业务而不仅仅是用户画像 http ...

  5. ios UILabel在storyBoard或xib中如何在每行文字不显示完就换行

    大家知道怎么用代码让label中的文字换行,只需要 label.numberOfLines = 0; label.text = @"这是第一行啦啦啦啦,\n这是第二行啦啦,\n这是第三行&q ...

  6. 如何取消MSSQL自带智能提示步骤,使用第三方智能提示插件

    步骤1如下: [工具]——[选项]——[文本编辑器]——[Transact-SQL]——[IntelliSense]——[Transact-SQL IntelliSense 设置]——(取消选择)—— ...

  7. JS学习之函数内部属性和方法

    知识点:arguments和this对象.caller属性.apply()和call()方法     arguments对象:函数内部对象,传入函数中所有参数的集合,类数组对象 属性:callee 指 ...

  8. (转)jquery easyui treegrid使用小结 (主要讲的是如何编辑easyui中的行信息包括添加 下拉列表等)

    在实际应用中可能会碰到不同的需求,比如会根据每行不同的参数或属性设置来设置同列不同的editor类型,这时原有的例子就显的有点太过简单,不能实现我们的需求,现在应用我在项目中的操作为例,显示下实现同列 ...

  9. solr 中文分词 IKAnalyzer

    solr中文分词器ik, 推荐资料:http://iamyida.iteye.com/blog/2220474?utm_source=tuicool&utm_medium=referral 使 ...

  10. 记一次TFS 的 垃圾提示(无法下载 未获取项目 的 代码)

    提示 “ 所有文件都是最新的 ”,但是在 源码管理 里面 确是 “未下载” 我艹,第一次遇到.如图.~~ 最后发现是 TFS 的项目权限设置问题. 你妈个马批的,啥子鸡巴破B提示,太阳你妈B 的 .要 ...