使用Java将逗号对齐的双精度打印到打印机设备
对于一个项目,我需要在打印机上打印一些数字。它们需要相互印在下面,在逗号上对齐。字体不是,也不能是单间距字体。我使用小数格式(“0.000”)将所有数字转换为以3位小数结尾的字符串 如何正确地将逗号上的数字相互对齐?我正在使用Java的可打印接口,如下所述 谢谢使用Java将逗号对齐的双精度打印到打印机设备,java,printing,alignment,Java,Printing,Alignment,对于一个项目,我需要在打印机上打印一些数字。它们需要相互印在下面,在逗号上对齐。字体不是,也不能是单间距字体。我使用小数格式(“0.000”)将所有数字转换为以3位小数结尾的字符串 如何正确地将逗号上的数字相互对齐?我正在使用Java的可打印接口,如下所述 谢谢 编辑:我不想打印到控制台上,而是打印到打印机上(真正的打印出来的硬件)只需将它们转换为对齐的字符串,然后打印这些字符串: public static String align (String str) { int n = str
编辑:我不想打印到控制台上,而是打印到打印机上(真正的打印出来的硬件)只需将它们转换为对齐的字符串,然后打印这些字符串:
public static String align (String str)
{
int n = str.indexOf('.');
StringBuilder sb = new StringBuilder ();
for (int i = n; i < 3; i++)
sb.append ((char)0x2007); // Append FIGURE-SPACE character
sb.append (str);
return sb.toString ();
}
public static void main(String[] args) {
Random r = new Random ();
DecimalFormat format = new DecimalFormat("0.000");
for (int i = 0; i < 10; i++)
{
String str = format.format(Math.pow (r.nextDouble(), 3.0) * 150.0);
System.out.println(align (str));
}
}
公共静态字符串对齐(字符串str)
{
int n=str.indexOf('.');
StringBuilder sb=新的StringBuilder();
对于(int i=n;i<3;i++)
sb.append((char)0x2007);//追加数字空格字符
某人(str);
使某人返回字符串();
}
公共静态void main(字符串[]args){
Random r=新的Random();
DecimalFormat格式=新的DecimalFormat(“0.000”);
对于(int i=0;i<10;i++)
{
String str=format.format(Math.pow(r.nextDouble(),3.0)*150.0);
System.out.println(align(str));
}
}
如果使用单间距字体,效果肯定会更好
我假设逗号是小数点。这是我要做的
- 使用抽绳生成逗号图像
- 将数字分成两部分,小数点前的数字和小数点后的数字
- 使用drawString生成小数点前的数字图像和小数点后的数字图像
- 将所有数字转换为图像后,检查十进制图像后的数字,以查看哪个数字的宽度最长
- 现在,您有了小数点后最长数字的宽度像素数和逗号
- 再次浏览数字图像,按照以下顺序在打印机画布上绘制图像
- 小数点后的数字
- 逗号
- 小数点前的数字
fontMetrics.charsWidth(…)
并将数字的整数部分(作为字符串)作为参数,但这并不正常。我想我只是要通过定义charwidth并迭代字符串来模拟单间隔字体。toCharArray()。再次感谢!另一方面,我在使打印机以单间隔打印时遇到问题(在另一个项目上…)。毫无疑问,我正在将图形环境的字体设置为单间距字体(新字体(“monospaced”,font.PLAIN,12)
),它在Mac上生成单间距打印,但在Windows上不生成。这是打印机制造商的驱动程序问题还是我能做些什么?我也尝试过Courier和Consoleas字体。谢谢,这或多或少是我的想法。我已经尝试过将字体名设置为“Courier New”,但我仍在努力,因为现在无论在Mac还是Windows上,我都再也看不到任何等距字体了。