Java – Decimal Format.parse返回具有指定小数位数的double值
我希望能够将一个字符串转换为一个Double,给出一个格式字符串中的小数位数.所以“###,## 0.000”应该给我一个双倍到3位的小数位.
编辑 – 添加更多信息发生了什么 用户输入UI中的值 – 输入到String中.规则是这个值限制在3位小数位.底层代码存储数据库中的值,然后在计算中使用该值.因此,尾随的小数位将导致计算略微偏离预期. 我有以下代码: try { // output current locale we are running under (this happens to be "nl_BE") System.out.println( "Current Locale is " + Locale.getDefault().toString() ); // number in Central European Format with a format string specified in UK format String numberCE = "1,234567"; // 1.234567 String formatUK = "###,##0.000"; // do the format DecimalFormat formatterUK = new DecimalFormat( formatUK ); Double valCEWithUKFormat = formatterUK.parse( numberCE ).doubleValue(); // I want the number to DPs in the format string!!! System.out.println( "CE Value " + numberCE + " in UK format (" + formatUK + ") is " + valCEWithUKFormat ); } catch( ParseException ex ) { System.out.println("Cannot parse number"); } } DecimalFormat似乎忽略了格式字符串,并给出了完整的字符串为1.234567的双精度. Decimal格式可以在解析时强制使用格式字符串吗?我错过了什么吗? 干杯, Andez 解决方法
DecimalFormat用于两个不同的目的:解析输入和格式输出.如果要同时进行两次,则必须使用格式对象两次.
如果要取该值并格式化输出,限制有效数字的数量,则需要再次使用格式对象.这次使用格式规则从数值创建一个输出字符串: String output = formatterUK.format(valCEWithUKFormat.doubleValue() ); 这将给你输出1,235 您似乎希望以1.235格式显示此数值.为此,您应该使用特定的区域设置格式化输出(如果您使用不同的格式). 不过,我建议不同的方式来接近这个问题: String text = "1,234567"; NumberFormat nf_in = NumberFormat.getNumberInstance(Locale.GERMANY); double val = nf_in.parse(text).doubleValue(); NumberFormat nf_out = NumberFormat.getNumberInstance(Locale.UK); nf_out.setMaximumFractionDigits(3); String output = nf_out.format(val); 几个注释: >输入解析应与输出格式保持分开.特别是当你开始投掷多个区域设置.>允许标准库为确定给定区域设置的有效输入值做出了很大的举措.您只需要选择适当的区域设置(我选择了德国,但这显然与其他人合作).始终使用语言环境.不要尝试重新创建格式化字符串.>从任何输出格式中始终存储您的输入值SEPARATE. IE,如果你想在输出中只显示三位数字,那没关系,但是存储整个double值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |