请教 关于数字格式化的问题 String a = "0.00";如何将a转成 Float类型 再将Float转成String 保证a的值不变 还是"0.00" 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 意义何在!!0.00,你转换成float,后面精度会丢失!何况为什么还要转成0.00字符串?? 转来转去 还是String Float.parseFloat(String str) 字符转换成Float toString 转换成String 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.0001.01.000 我现在的情况是 我有一个类A A有一个属性a 是float类型的 表示金钱 现在jsp页面中有很多地方用到了a 现在相对a进行格式化 无论什么情况都是保留两位小数,想直接更改一下类 不要一个页面一个页面更改了 是这么个情况 有好的解决办法吗? 没那么麻烦吧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了么 结果是C:123.23String C:123.23 表示金钱应该使用BigDecimalnew BigDecimal("0.00") 楼主的意思,应该是“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调用的话,那就麻烦了…… 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 float b = 123.855f; float c = (float)(Math.round(b*100))/100;这个,会丢失精度? Swing程序自动关闭 java简单弹出窗口问题。。 JDBC分页问题 如何读取这个文件(菜鸟级问题) 请教数组length属性的问题 JavaBean出错,我就没用成功过。急求解决 如何在运行applet的时候自动更新jre环境,不是到sun站点去更新,而是到我的web服务器上更新 请高手指教..如何此程序简化代码(新手) 一个RMI的问题 关于最新的java plugin的使用问题? 闲的没事发个小问题 北京尚学堂怎么样
0.00,你转换成float,后面精度会丢失!
何况为什么还要转成0.00字符串??
Float.parseFloat(String str) 字符转换成Float
toString 转换成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
float c = (float)(Math.round(b*100))/100;
System.out.println("C:"+c);
System.out.println("String C:"+String.valueOf(c));这样不就ok了么
String C:123.23
new BigDecimal("0.00")
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调用的话,那就麻烦了……
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
float b = 123.855f;
float c = (float)(Math.round(b*100))/100;这个,会丢失精度?