可能重复:
将小数点后的双精度数加到2位有效数字
我在我的应用程序中处理了很多双值,是否有任何简单的方法来处理Java中十进制值的格式?
还有其他更好的办法吗?
DecimalFormat df = new DecimalFormat("#.##");
Run Code Online (Sandbox Code Playgroud)
我想要做的基本上是格式双值
23.59004 to 23.59
35.7 to 35.70
3.0 to 3.00
9 to 9.00
Run Code Online (Sandbox Code Playgroud) 我目前使用以下代码打印双:
return String.format("%.2f", someDouble);
Run Code Online (Sandbox Code Playgroud)
这很有效,除了Java使用我的Locale的小数分隔符(逗号),而我想使用一个点.是否有捷径可寻?
有没有办法格式化小数如下:
100 -> "100"
100.1 -> "100.10"
Run Code Online (Sandbox Code Playgroud)
如果是圆数,则省略小数部分.否则格式化为两位小数.
使用Eclipse(Helios)开发Web应用程序时,tomcat输出将被发送到控制台.好的,但是消息正在翻译成我的操作系统语言.
事实上,我的Eclipse是英文版,但Tomcat输出(日志记录)正在翻译成葡萄牙语.可能是Tomcat配置问题,但我无法找到...
我该如何改变这种行为?我希望我的整个Eclipse都是英文的,包括Tomcat.
我希望能够在格式字符串中给出一些小数位,将字符串转换为Double.所以"###,## 0.000"应该给我一个Double到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 …Run Code Online (Sandbox Code Playgroud) 我在 Java 11 上遇到了一个奇怪的问题。我正在移植一个巨大的项目,我有一些使用 DecimalFormat 的测试在 11 构建上失败,但在 8 构建上没有。
Java 11 中的 DecimalFormat 给了我一个逗号小数点分隔符,而在 Java 8 上它给了我一个点。
这是一个最小的可重现示例:
import java.text.DecimalFormat;
public class Test {
public static void main(String[] args) {
DecimalFormat format = new DecimalFormat("#0.00");
System.out.println(format.format(1.02));
}
}
Run Code Online (Sandbox Code Playgroud)
它1.02在 Java 8 和1,02Java 11 上输出。
这是使用两个版本构建和运行示例的整个终端会话:
~ » sdk use java 8.0.282.hs-adpt
Using java version 8.0.282.hs-adpt in this shell.
~ » javac -version
javac 1.8.0_282
~ » javac Test.java
~ » java -version
openjdk version "1.8.0_282" …Run Code Online (Sandbox Code Playgroud) 我已经阅读了很多线程,似乎是在我的双号中保留2个位置的最佳解决方案:
DecimalFormat df = new DecimalFormat("#.00");
double d = 1.234567;
System.out.println(df.format(d));
Run Code Online (Sandbox Code Playgroud)
但是当我使用它时,它会打印:
1,23
我想保留DOT,因为我需要使用这种格式(#.##)(我将它用作字符串).我该如何保留这个点?
我想将十进制值格式化为货币值:1234.56d应变为"1.234,56"(此格式在某些欧洲国家/地区使用).我使用以下模式格式化十进制值:
final DecimalFormat df = new DecimalFormat("###.###.###,00");
final String formatted = df.format(1234.56d);
System.out.println(formatted);
Run Code Online (Sandbox Code Playgroud)
事实上我正在使用SuperCSV的类FmtNumber,但这没关系,因为模式语法是相同的:new FmtNumber("###.###.###,00");
我得到的是IllegalArgumentException,消息"模式中有多个小数分隔符".
我知道只能有一个小数分隔符.但就我而言,它应该是","的标志.并且","在我的模式中只出现一次.
我搜索了Web和StackOverflow这个异常消息,但我没有找到有用的答案.
我的错误是什么?
如何将BigDecimal对象始终舍入为2位小数(即使我的BigDecimal对象没有小数)?
我正在做:
myBigDecimal.setScale(2, RoundingMode.HALF_UP); // works fine when it has decimals
Run Code Online (Sandbox Code Playgroud)
上下文:我有一个POJO列表,当我发送到前端时,我在ExtJs中给它们格式
但
我也在生成一个CSV文件,并且我被要求所有经济领域都有2位小数.
任何想法或工作?
谢谢
如何用逗号格式化字符串以currentny格式显示?
假设传入的字符串是一个很大的数字.例如:
"1234567901234567890123456"
我希望结果如下:
"12,345,678,901,234,567,890,123,456"
在DecimalFormatJava中有一个限制格式化一个大数目.