javanumberformat,javanumberformat保留两位小数

http://www.itjxue.com  2023-01-15 06:25  来源:未知  点击次数: 

【java继承】NumberFormat与DecimalFormat的问题

首先说明:

人 是父类 男人 和 女人 是子类

正确的转换像父类转换 :人=(人)new 男人,人=(人)new 女人;

你的情况情况: 男人=(人)new 人; 你new的是人。不一定是男人或

也许是个人是女人

你的代码:(修改) 就可以了。

Father f1 = new Son();

Son s1 = (Son) f1;

你说的NumberFormat 是个抽象类 是不能 实例化的必须通过它的子类。。

NumberFormat.getInstance();方法中 有这样一句。。你要看看源码

{

DecimalFormat format = new DecimalFormat(numberPatterns[entry], symbols);

return format ;

}

NumberFormat 是父 DecimalFormat 是子.

在父类中的是直接new的子类对象。。 当然可以转换成子类对象

就像你的代码一样改成 也是一样的

Son s1 = new Son();

Father f1 = (Father) s1;

理解一下java的多态。。继承~

Java java.lang.NumberFormatException: empty String

因为你这个是报的异常

你首先应该看异常信息是什么 上面说的是

NumberFormatExceptionextends

如果你不认识你首先应该去查JDK的帮助文档,上面是这样写的

public class NumberFormatExceptionextends IllegalArgumentException

当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。

看到这我想你应该明白是什么意思了吧。

也就是说你将一个可能包括非数学字符相关的字符串转成成数值,导致错误

比如说 12as34,他是不可以转成数值的。

你的代码我没有细看,我想可能是通过getText时获得了非数值字符转

看你的详见

我看可能是由

JComboBox控件引起

Java 关于中文大写金额与阿拉伯数字 互相转换的问题(eclipse版)

package test.format;import java.text.NumberFormat;import java.util.HashMap;public class SimpleMoneyFormat {

public static final String EMPTY = "";public static final String ZERO = "零";public static final String ONE = "壹";public static final String TWO = "贰";public static final String THREE = "叁";public static final String FOUR = "肆"; public static final String FIVE = "伍";public static final String SIX = "陆";public static final String SEVEN = "柒"; public static final String EIGHT = "捌"; public static final String NINE = "玖"; public static final String TEN = "拾"; public static final String HUNDRED = "佰"; public static final String THOUSAND = "仟"; public static final String TEN_THOUSAND = "万"; public static final String HUNDRED_MILLION = "亿"; public static final String YUAN = "元"; public static final String JIAO = "角"; public static final String FEN = "分"; public static final String DOT = "."; private static SimpleMoneyFormat formatter = null;private HashMap chineseNumberMap = new HashMap(); private HashMap chineseMoneyPattern = new HashMap(); private NumberFormat numberFormat = NumberFormat.getInstance(); private SimpleMoneyFormat() { numberFormat.setMaximumFractionDigits(4); numberFormat.setMinimumFractionDigits(2); numberFormat.setGroupingUsed(false); chineseNumberMap.put("0", ZERO); chineseNumberMap.put("1", ONE); chineseNumberMap.put("2", TWO); chineseNumberMap.put("3", THREE); chineseNumberMap.put("4", FOUR); chineseNumberMap.put("5", FIVE); chineseNumberMap.put("6", SIX); chineseNumberMap.put("7", SEVEN); chineseNumberMap.put("8", EIGHT); chineseNumberMap.put("9", NINE); chineseNumberMap.put(DOT, DOT); chineseMoneyPattern.put("1", TEN); chineseMoneyPattern.put("2", HUNDRED); chineseMoneyPattern.put("3", THOUSAND); chineseMoneyPattern.put("4", TEN_THOUSAND); chineseMoneyPattern.put("5", TEN); chineseMoneyPattern.put("6", HUNDRED); chineseMoneyPattern.put("7", THOUSAND); chineseMoneyPattern.put("8", HUNDRED_MILLION); }

public static SimpleMoneyFormat getInstance() { if (formatter == null) formatter = new SimpleMoneyFormat(); return formatter; }

public String format(String moneyStr) { checkPrecision(moneyStr); String result; result = convertToChineseNumber(moneyStr); result = addUnitsToChineseMoneyString(result); return result; } public String format(double moneyDouble) { return format(numberFormat.format(moneyDouble)); } public String format(int moneyInt) { return format(numberFormat.format(moneyInt));

} public String format(long moneyLong) { return format(numberFormat.format(moneyLong)); }

public String format(Number moneyNum) { return format(numberFormat.format(moneyNum)); }

private String convertToChineseNumber(String moneyStr) { String result; StringBuffer cMoneyStringBuffer = new StringBuffer(); for (int i = 0; i moneyStr.length(); i++) { cMoneyStringBuffer.append(chineseNumberMap.get(moneyStr.substring(i, i + 1))); }

//拾佰仟万亿等都是汉字里面才有的单位,加上它们 int indexOfDot = cMoneyStringBuffer.indexOf(DOT); int moneyPatternCursor = 1; for (int i = indexOfDot - 1; i 0; i--) { cMoneyStringBuffer.insert(i, chineseMoneyPattern.get(EMPTY + moneyPatternCursor)); moneyPatternCursor = moneyPatternCursor == 8 ? 1 : moneyPatternCursor + 1; } String fractionPart = cMoneyStringBuffer.substring(cMoneyStringBuffer.indexOf(".")); cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("."), cMoneyStringBuffer.length()); while (cMoneyStringBuffer.indexOf("零拾") != -1) {

cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零拾"), cMoneyStringBuffer.indexOf("零拾") + 2, ZERO);

} while (cMoneyStringBuffer.indexOf("零佰") != -1) {

cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零佰"), cMoneyStringBuffer.indexOf("零佰") + 2, ZERO);

}while (cMoneyStringBuffer.indexOf("零仟") != -1) {

cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零仟"), cMoneyStringBuffer.indexOf("零仟") + 2, ZERO);

}while (cMoneyStringBuffer.indexOf("零万") != -1) {

cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零万"), cMoneyStringBuffer.indexOf("零万") + 2, TEN_THOUSAND);

} while (cMoneyStringBuffer.indexOf("零亿") != -1) {

cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零亿"), cMoneyStringBuffer.indexOf("零亿") + 2, HUNDRED_MILLION); } while (cMoneyStringBuffer.indexOf("零零") != -1) {

cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零零"), cMoneyStringBuffer.indexOf("零零") + 2, ZERO);

} if (cMoneyStringBuffer.lastIndexOf(ZERO) == cMoneyStringBuffer.length() - 1) cMoneyStringBuffer.delete(cMoneyStringBuffer.length() - 1, cMoneyStringBuffer.length()); cMoneyStringBuffer.append(fractionPart);

result = cMoneyStringBuffer.toString(); return result; }private String addUnitsToChineseMoneyString(String moneyStr) { String result; StringBuffer cMoneyStringBuffer = new StringBuffer(moneyStr); int indexOfDot = cMoneyStringBuffer.indexOf(DOT); cMoneyStringBuffer.replace(indexOfDot, indexOfDot + 1, YUAN); cMoneyStringBuffer.insert(cMoneyStringBuffer.length() - 1, JIAO); cMoneyStringBuffer.insert(cMoneyStringBuffer.length(), FEN); if (cMoneyStringBuffer.indexOf("零角零分") != -1)//没有零头,加整

cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零角零分"), cMoneyStringBuffer.length(), "整"); else if (cMoneyStringBuffer.indexOf("零分") != -1)//没有零分,加整 cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零分"), cMoneyStringBuffer.length(), "整");

else { if(cMoneyStringBuffer.indexOf("零角")!=-1)

cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("零角"),cMoneyStringBuffer.indexOf("零角")+2);

tmpBuffer.append("整"); } result = cMoneyStringBuffer.toString(); return result; } private void checkPrecision(String moneyStr) {

int fractionDigits = moneyStr.length() - moneyStr.indexOf(DOT) - 1; if (fractionDigits 2) throw new RuntimeException("金额" + moneyStr + "的小数位多于两位。"); //精度不能比分低 }public static void main(String args[]) { System.out.println(getInstance().format(new Double(10010001.01))); }}

java中numberformat怎么用

NumberFormat

是所有数值格式的抽象基类。

该类提供了格式化和分析数值的接口。

NumberFormat

也提供了确定

哪个语言环境具有数值格式以及它们名字的方法。

java 简单问题

NumberFormat用于规范各种数值输出格式

比如:

NumberFormat money = NumberFormat.getCurrencyInstance();

表示获取货币数值格式

System.out.println(money.format(123));

这样在我们的机器上会输出:¥123.00 也就是加上了货币符号

而这个

NumberFormat percent = NumberFormat.getPercentInstance();

表示获取百分比的格式

System.out.println(percent.format(0.12)); 会把0.12转化为百分比,即12%

java NumberFormat 问题~~~高手进

第一方法.setGroupingUsed(false);不进行分组,显示的时候就不会有逗号了.取的时候可以直接获取了.

第二方法.在获取后用string的replaceAll方法将所有的逗号去掉.再去parse

(责任编辑:IT教学网)

更多

相关金山WPS文章

推荐金山WPS文章