String a = "0.00";
如何将a转成 Float类型 再将Float转成String 保证a的值不变  还是"0.00"

解决方案 »

  1.   

    意义何在!!
    0.00,你转换成float,后面精度会丢失!
    何况为什么还要转成0.00字符串??
      

  2.   

    转来转去 还是String  
    Float.parseFloat(String str)  字符转换成Float  
    toString 转换成String
      

  3.   

    String -> float -> String
    这个过程中,如果后面的是0的话,精度是会丢失的。
    所以这里需要特殊处理,可以通过格式化来实现:
    1、获取原来精度;
    2、格式化String,还原精度。        String a = "1.000";
            float f = Float.valueOf(a);
            
            int reserve = a.length() - 1 - a.indexOf('.');  // 求原来保留的位数
            String format = "%." + reserve + "f";     // %.3f 格式串
            String ret = String.format(format, f);    // 格式化,和原来保持一致
            
            System.out.println(a);
            System.out.println(f);
            System.out.println(ret);
    输出结果:
    1.000
    1.0
    1.000
      

  4.   

    我现在的情况是  我有一个类A A有一个属性a 是float类型的 表示金钱   现在jsp页面中有很多地方用到了a 现在相对a进行格式化 无论什么情况都是保留两位小数,想直接更改一下类   不要一个页面一个页面更改了  是这么个情况   有好的解决办法吗?
      

  5.   

    没那么麻烦吧float b = 123.23345f;
    float c = (float)(Math.round(b*100))/100;
    System.out.println("C:"+c);
    System.out.println("String C:"+String.valueOf(c));这样不就ok了么
      

  6.   

    结果是C:123.23
    String C:123.23
      

  7.   

    表示金钱应该使用BigDecimal
    new BigDecimal("0.00")
      

  8.   

    楼主的意思,应该是“1.00”如果转成String就会变成“1.0”,精度就会降低,所以还是得格式化一下,只是【*100/100】的话,还是解决不了精度丢失问题。如果是保留两位数,那可以直接写成【%.3f】,就不用获取精度了:        // 四舍五入
            double d = new BigDecimal("1.300").setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
            String ret = String.format("%.2f", d);   // 格式化
    修改获取的话,得看楼主是怎么调用A类的a属性的。
    如果使用get(),那么直接在get()里面的return包一层格式化就好了。
    如果直接A.a调用的话,那就麻烦了……
      

  9.   


    float b = 123.0000f; 
    float c = (float)(Math.round(b*100))/100; 
    String d = String.format("%.2f",c);
    System.out.println("String d:"+d);
    运行结果:
    String d:123.00
      

  10.   


    float b = 123.855f; 
    float c = (float)(Math.round(b*100))/100;这个,会丢失精度?