使用Java将逗号对齐的双精度打印到打印机设备

使用Java将逗号对齐的双精度打印到打印机设备,java,printing,alignment,Java,Printing,Alignment,对于一个项目,我需要在打印机上打印一些数字。它们需要相互印在下面,在逗号上对齐。字体不是,也不能是单间距字体。我使用小数格式(“0.000”)将所有数字转换为以3位小数结尾的字符串 如何正确地将逗号上的数字相互对齐?我正在使用Java的可打印接口,如下所述 谢谢 编辑:我不想打印到控制台上,而是打印到打印机上(真正的打印出来的硬件)只需将它们转换为对齐的字符串,然后打印这些字符串: public static String align (String str) { int n = str

对于一个项目,我需要在打印机上打印一些数字。它们需要相互印在下面,在逗号上对齐。字体不是,也不能是单间距字体。我使用小数格式(“0.000”)将所有数字转换为以3位小数结尾的字符串

如何正确地将逗号上的数字相互对齐?我正在使用Java的可打印接口,如下所述

谢谢


编辑:我不想打印到控制台上,而是打印到打印机上(真正的打印出来的硬件)

只需将它们转换为对齐的字符串,然后打印这些字符串:

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生成小数点前的数字图像和小数点后的数字图像

  • 将所有数字转换为图像后,检查十进制图像后的数字,以查看哪个数字的宽度最长

  • 现在,您有了小数点后最长数字的宽度像素数和逗号

  • 再次浏览数字图像,按照以下顺序在打印机画布上绘制图像

    • 小数点后的数字
    • 逗号
    • 小数点前的数字

不幸的是,我没有打印到控制台,而是使用graphics.drawString(字符串str,int x,int y)打印到打印机设备,字符串str从位置x,y开始从左到右打印(如此左对齐)。控制台是单间距的,这将很容易…即使在非单间距字体中,所有数字通常具有相同的宽度,并且有特殊的unicode字符“FIGURE-SPACE”(U+2007)具有与数字相同的宽度。感谢您的建议。我试着做一些类似的事情,在小数点上拆分数字,在一个以逗号为前缀的固定点上打印小数部分,并在整数部分前面加前缀。问题是我无法计算出整数部分的锚点x,因为它的长度可变。我尝试了
fontMetrics.charsWidth(…)
并将数字的整数部分(作为字符串)作为参数,但这并不正常。我想我只是要通过定义charwidth并迭代字符串来模拟单间隔字体。toCharArray()。再次感谢!另一方面,我在使打印机以单间隔打印时遇到问题(在另一个项目上…)。毫无疑问,我正在将图形环境的字体设置为单间距字体(
新字体(“monospaced”,font.PLAIN,12)
),它在Mac上生成单间距打印,但在Windows上不生成。这是打印机制造商的驱动程序问题还是我能做些什么?我也尝试过Courier和Consoleas字体。谢谢,这或多或少是我的想法。我已经尝试过将字体名设置为“Courier New”,但我仍在努力,因为现在无论在Mac还是Windows上,我都再也看不到任何等距字体了。