两个问题合在一起,但我有一个非常简短的测试用例来证明我的问题:
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import java.text.*;
import java.util.*;
import javax.imageio.*;
public class Numbers {
public static void main(String[] args) throws IOException {
double[] numbers = { 10000.12, 20000.23, 3000.45 };
DecimalFormat format = new DecimalFormat("0.00");
format.setGroupingUsed(false);
BufferedImage image = new BufferedImage(400, 150, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = image.createGraphics();
g2d.setColor(Color.BLACK);
g2d.setBackground(Color.YELLOW);
g2d.clearRect(0, 0, image.getWidth(), image.getHeight());
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setFont(new Font(Font.SANS_SERIF,Font.BOLD, 24));
FontMetrics metrics = g2d.getFontMetrics();
for (int i = 0; i < numbers.length; i++) {
String str = format.format(numbers[i]);
System.out.println(i …Run Code Online (Sandbox Code Playgroud) 我在使用DecimalFormat时遇到了最奇怪的事情.
我在webapplication中使用它.我设置了一些测试,它在本地继续失败.我的一个朋友运行它,他能够成功运行JUnit测试.
奇怪的是,在我们的服务器上,应用程序运行完美,没有任何问题.
可能是Java依赖于valuta和数字设置等系统设置?或者还有其他原因吗?这就是我的代码片段:
public String generateFormatPrice(double price) throws Exception {
DecimalFormat format1 = new DecimalFormat("#,##0.00");
String tmp = format1.format(price).replace(".", "&");
String[] tmps = tmp.split("&");
return tmps[0].replace(',', '.') + "," + tmps[1];
}
Run Code Online (Sandbox Code Playgroud)
非常感谢提前!
public class Test {
public static void main(String[] args) {
final String test1 = new String("01,");
final String test2 = new String("01,0");
final String test3 = new String("1,00");
String pattern = "##,##";
DecimalFormat formatter;
DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setGroupingSeparator(',');
formatter = new DecimalFormat(pattern, dfs);
String result1 = formatter.format(test1);
String result2 = formatter.format(test2);
String result3 = formatter.format(test3);
System.out.println("Result 1 == " + result1);
System.out.println("Result 2 == " + result2);
System.out.println("Result 3 == " + result3);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试格式化字符串.我添加了用于格式化的代码.我越来越异常了.
我希望所有这些的结果为01,00.
例外 …
我试图格式化在基本图形系统中创建的回归曲线的标签.基本上,此标签从变量中提取斜率,截距和r平方值.一个例子如下:
plot(rnorm(10), type = "n", xlim = c(0, 100), ylim = c(0, 100))
text(x = 0, y = 100, adj = c(0, NA), bquote(paste(y == .(a) * x + .(b), ", R"^2 == .(r2))), cex = 0.7)
Run Code Online (Sandbox Code Playgroud)
但是,这会产生一个看起来不太聪明的标签:
y = 1.159019x+-1.537708, R<sup>2</sup>=0.7924927
Run Code Online (Sandbox Code Playgroud)
我想要的是将数字四舍五入到小数点后第二位,即
y = 1.16x-1.54, R<sup>2</sup>=0.79
Run Code Online (Sandbox Code Playgroud)
我已经在两个帮助文档中查找了text(),bquote()但没有找到太多有用的信息.
我也曾尝试来包装.(a),.(b)并.(r2)在format()与参数nsmall = 2,但没有奏效.
有人可以帮我这个吗?提前谢谢了!
PS.我认为我的问题中有一个隐藏的任务.在上面的例子中,b是否定的.我知道我可能会"+"在我的表达式中忽略运算符,只是使用负号b来加入我的等式.但是,如果我不知道b事先的迹象怎么办?是否有一种巧妙的方法来形成标签,而不是用a来检查它,if()然后写两个非常不同的版本text()?再次感谢!
我试图阻止java double以科学记数法打印.我知道我可以使用DecimalFormat,但这会生成一个String.我怎样才能产生实际的双倍?我试过了:
DecimalFormat df = new DecimalFormat("#");
df.setMaximumFractionDigits(8);
double n = Double.parseDouble(df.format(z));
Run Code Online (Sandbox Code Playgroud)
然而,这仍然是科学记数法的两倍.
我正在尝试使用bigdecimals和decimalFormat以科学记数法格式显示小数,这是我到目前为止所提出的:
BigDecimal a = new BigDecimal("0.000001");
DecimalFormat df = new DecimalFormat("0.0###E0");
System.out.println(df.format(a));
Run Code Online (Sandbox Code Playgroud)
这个程序输出"1.0E-4",这正是我想要的.现在,如果我将bigDecimal设置为"0.2222",则输出为2.222E-1.
我的问题是:在这种情况下有没有办法阻止科学记数法而不是2.222E-1,输出应该是0.2222?
我的应用程序允许用户搜索位置,我收到的查询之一是
\n\n"78\xc2\xb014\'09"N 15\xc2\xb029\'29"E"\nRun Code Online (Sandbox Code Playgroud)\n\n显然用户想要转到这个位置。\n首先如何检查该字符串是否正确符合十进制格式。那么如何将其转换为双精度格式呢?
\n\ndouble latitude = convertToDouble("78\xc2\xb014\'09"N")\nRun Code Online (Sandbox Code Playgroud)\n\n我在 stackoverflow 上搜索过,但他们都在寻找相反的内容:双精度到十进制。
\n我可以DecimalFormat轻松地使用格式化我的数字.例
DecimalFormat format = new DecimalFormat("#.#");
Run Code Online (Sandbox Code Playgroud)
但是,我需要将此数字传递给Localized格式化,就像这样
DecimalFormat english = (DecimalFormat)DecimalFormat.getNumberInstance(Locale.ENGLISH);
Run Code Online (Sandbox Code Playgroud)
如何将两者结合起来?谢谢.
我有一个使用DecimalFormat( https://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html ) API 的实现。
解决方案1:争论是因为DecimalFormat不是线程安全的,我倾向于使用创建ThreadLocal来DecimalFormat使其线程安全。此外,它将保存每次调用的 DecimalFormat 对象的创建
private static final ThreadLocal<DecimalFormat> restrictTo1DecimalPlace =
ThreadLocal.withInitial
(() -> new DecimalFormat("0.0%", DecimalFormatSymbols.getInstance(Locale.ENGLISH)));
Run Code Online (Sandbox Code Playgroud)
解决方案 2:另一个简单的解决方案是放弃对象的可重用性并DecimalFormat每次都创建对象。
new DecimalFormat("0.0%", DecimalFormatSymbols.getInstance(Locale.ENGLISH)).format(decimalValueToFormat)
Run Code Online (Sandbox Code Playgroud)
什么是更好的?
我想删除无意义的小数位,如下所示:
14.50 => 14.5
14.0500 => 14.05
14.000 => 14
Run Code Online (Sandbox Code Playgroud)
我正在寻找如何做到这一点,我发现了以下方法:
{{ number|trim('0')|trim('.') }}
Run Code Online (Sandbox Code Playgroud)
但上述过滤器的唯一问题是以下情况:
0.023 => 023
Run Code Online (Sandbox Code Playgroud)
有谁知道我怎样才能实现这一目标?
decimalformat ×10
java ×8
android ×2
double ×2
bigdecimal ×1
decimal ×1
drawstring ×1
gps ×1
graphics2d ×1
label ×1
location ×1
php ×1
plot ×1
r ×1
symfony ×1
twig ×1