【发布时间】:2019-09-30 12:59:59
【问题描述】:
我正在尝试使用 DecimalFormat 转换双精度值的小数分隔符,同时保留原始数字的所有小数。 DecimalFormatter 接受格式为“0.##”的模式,例如。由于我必须使用具有不同小数的数字,因此这不起作用,因为始终需要在模式中指定小数位数。
我正在寻找解决此问题的方法。
我已经尝试过 String.format。 DecimaFormatter 和 NumberFormatter
我最理想的情况是:
private static final ThreadLocal< DecimalFormat > formatter = new ThreadLocal< DecimalFormat >()
{
@Override
protected DecimalFormat initialValue()
{
// n should be any number of decimals without having to specify them.
return new DecimalFormat("0.0#n");
}
};
一些例子:
DecimalFormat df = new DecimalFormat("0.0##");
System.out.println(df.format(2.456))
System.out.println(df.format(2.1));
结果:
2,456 -> Good
2,100 -> Not good
我想设置一个模式/正则表达式,它适用于小数点分隔符后任意位数的双精度,例如:
2,456 -> Good
2,1 -> Good
3,3453456345234 -> Good
【问题讨论】:
-
"...同时保留原始数字的所有原始小数点..." 一个数字最多只能有一个小数点(根据文化,可能是
.或,等)。一个数字可能有多个分组分隔符(在大多数讲英语的语言环境中,“千”分隔符,但并非所有文化都以相同的方式分组)(也可以是.或,甚至是空格),但只有一位小数观点。你的意思是分组分隔符?还是小数位?另外:请显示示例数字、格式不正确的数字以及它们*应该*看起来的样子。 -
很抱歉给您带来了困惑。我更正了原帖。我的意思是分隔符后面的数字。
-
:-) 英文术语是“小数位”(但小数点后的数字也可以)。但同样,请提供示例、您得到的错误输出以及正确的输出。
-
@AthraelSoju 重读 Crowder 的第一条评论。您继续混淆将数字的小数部分与整数部分分开的小数分隔符的concepts and terms,以及使整数部分更容易阅读的分组分隔符 .
-
@AthraelSoju 我假设您仍然希望小数点后至少有一位数字?否则
new DecimalFormat("")似乎正在提供所需的行为?