Float sum = new Float(300); // always somehow calculated
DecimalFormat df = new DecimalFormat("#.#");
String s = df.format(sum/3); // prints 100, I want 100.0
s = df.format(301/3); // pritns 100.3 which is correct
Run Code Online (Sandbox Code Playgroud)
结果应始终格式化为1十进制,如何操作?
public static String formatAmountUpToTwoDecimalNumber(String amount)
{
if(amount==null || "".equals(amount))
{
return "";
}
Double doubleAmount = Double.valueOf(amount);
double myAmount = doubleAmount.doubleValue();
NumberFormat f = new DecimalFormat("###,###,###,###,##0.00");
String s = f.format(myAmount);
return s;
}
Run Code Online (Sandbox Code Playgroud)
"###,###,###,###,##0.00",这种模式的目的究竟是什么?我认为它有两个目的
但为什么有"0"而不是"#"十进制之前?这零的目的究竟是什么?谢谢您的帮助.
注意:据我所知,这个问题并不重复!我找到的所有问题/答案要么是如何从已经在R中的数据中消除点,要么在加载时如何将小数点更改为逗号.
我有一个csv,其数字如下:4.123,98.问题是因为.加载时输出变成了字符串矩阵read.table,read.csv或者read.csv2.更改dec到,于事无补.
我的问题
加载这个csv的最优雅的方法是什么,以便数字变成例如4123.98数字?
这可能看起来像一个重复的问题,但我尝试了以下所有链接,无法得到正确的答案.
但我没有弄错.这是我的代码
DecimalFormat twoDForm = new DecimalFormat("#.##");
double externalmark = 1.86;
double internalmark = 4.0;
System.out.println(String.valueOf((externalmark*3+internalmark*1)/4));
String val = String.valueOf((externalmark*3+internalmark*1)/4);
String wgpa1=twoDForm.format(val); // gives exception
String wgpa2=twoDForm.format((externalmark*3+internalmark*1)/4)); // works fine
System.out.println(wgpa1);
Run Code Online (Sandbox Code Playgroud)
该format方法采用Object类型参数,这就是我传递给出异常的String对象的原因
线程"main"中的异常java.lang.IllegalArgumentException:无法 将给定的Object格式化为数字.
但是当我将double值作为参数时,程序运行正常.但是如果方法是用Object类型参数定义的,为什么我在传递时传递一个异常并且在传递时String没有获得异常double?
java overloading exception illegalargumentexception decimalformat
我使用以下DecimalFormat模式:
// Use ThreadLocal to ensure thread safety.
private static final ThreadLocal <NumberFormat> numberFormat =
new ThreadLocal <NumberFormat>() {
@Override protected NumberFormat initialValue() {
return new DecimalFormat("#,##0.00");
}
};
Run Code Online (Sandbox Code Playgroud)
这将执行以下转换:
1 -> 1.00
1.1 -> 1.10
1.12 -> 1.12
Run Code Online (Sandbox Code Playgroud)
我现在有一个额外的要求.
1.123 -> 1.123
1.1234 -> 1.123
Run Code Online (Sandbox Code Playgroud)
这意味着什么时候
我可以在DecimalFormat课堂上指定这种行为吗?
我想删除所有尾随零而不截断或舍入数字,如果它没有任何.例如,数字可能类似12.0,在这种情况下,应删除尾随零.但这个数字也可能是一种几乎不合理的东西,比如12.9845927346958762...继续走到屏幕的边缘.有没有办法设置DecimalFormat或其他类来剪切尾随零,同时保持非理性完整?
我DecimalFormat有时会回来'?' 在尝试时format().是否有可以创建此方案的输入?
例如:
DecimalFormat df = new DecimalFormat("#.####");
df.format(X); // output : '?'
Run Code Online (Sandbox Code Playgroud)
还有什么X可能呢?
我使用以下代码使数字显示两个小数位和数千个逗号分隔符.
public static String formatNumber(double amount){
DecimalFormat formatter = new DecimalFormat("#,###.00");
return formatter.format(amount);
}
Run Code Online (Sandbox Code Playgroud)
对于其他数字,它可以,但0返回为".00"我希望它为"0.00"我应该更改什么?
我如何将以下代码转换为C#
DecimalFormat form
String pattern = "";
for (int i = 0; i < nPlaces - nDec - 2; i++) {
pattern += "#";
}
pattern += "0.";
for (int i = nPlaces - nDec; i < nPlaces; i++) {
pattern += "0";
}
form = (DecimalFormat) NumberFormat.getInstance();
DecimalFormatSymbols symbols = form.getDecimalFormatSymbols();
symbols.setDecimalSeparator('.');
form.setDecimalFormatSymbols(symbols);
form.setMaximumIntegerDigits(nPlaces - nDec - 1);
form.applyPattern(pattern);
Run Code Online (Sandbox Code Playgroud)
编辑特别的问题是我不希望小数分隔符改变Locale(例如,一些Locales会使用',').
如何根据设备的 Locale.getDefault() 格式化大于 999 的浮点数。
对于十进制格式,目前我正在使用这个:
DecimalFormat decim = new DecimalFormat("#.##");
tv.setText(decim.format(someFloat));
Run Code Online (Sandbox Code Playgroud)
对于千位分隔符:
tv.setText(String.format(Locale.getDefault(), "%,d", someInt));
Run Code Online (Sandbox Code Playgroud)
如果我想显示3.678,66(或3,678.66- 取决于 Locale.getDefault()),如何将两者结合起来?
decimalformat ×10
java ×9
decimal ×2
formatting ×2
android ×1
c# ×1
csv ×1
double ×1
exception ×1
format ×1
overloading ×1
r ×1