java - 获取两个数字之间的位数差

标签 java

对于一个简单的命令行工具,我想绘制一个显示一些点及其 y 轴值的简单图形。对于 y 轴标签,我想打印当前“行”的级别,例如:

55,09|  |
54,90|  ||
54,70|  ||
54,51|  ||
54,32|  ||
54,13|  ||
53,94|  ||
53,75|  ||
53,56|  ||
53,37|  |||
53,18|  |||                   |    |
52,99|  |||            |     ||    |
52,80|  |||         |  |     ||    |
52,61|  |||         || |     |||   |
52,42| ||||||       || |  |  ||||  ||
52,23| ||||||       ||||  |  ||||  ||
52,04| ||||||       ||||  |  |||| |||
51,85| ||||||       ||||  |  |||| |||
51,66| ||||||       |||| ||| |||| |||
51,47| ||||||      ||||||||| ||||||||
51,28| ||||||      ||||||||||||||||||
51,09| ||||||      ||||||||||||||||||
50,90| ||||||     |||||||||||||||||||
50,71| ||||||     |||||||||||||||||||
50,52| |||||||    |||||||||||||||||||
50,33| |||||||    |||||||||||||||||||
50,14| |||||||  |||||||||||||||||||||
49,95| |||||||  |||||||||||||||||||||
49,76| |||||||| |||||||||||||||||||||
49,28| ||||||||||||||||||||||||||||||

但是最大值的位数可能比最小值多:

1000,00| |
666,67| | |
333,33| |||
0,01|||||

那么我怎样才能得到最大值和最小值之间的数字差异,以便我可以添加前导空格?

1000,00| |
 666,67| | |
 333,33| |||
   0,01|||||

最佳答案

Quick'n'dirty:

double max = getMaximum(); // Get your maximum Y value
int smax = String.format("%.2f", max).length(); // Print as a string and get number of characters

在你的循环中:

System.out.format("%"+smax+".2f", value);

编辑,来自@EJP 的评论

在 max 上使用 log10 确实既干净又高效。它将为您提供 10 的幂,因此将使用的位数(减一)。虽然第一个解决方案很简单(计算字符数,这正是我们想要的),但该解决方案在其他方面都更好:

double max = getMaximum();
int ndigits = (int)Math.floor(Math.log10(max)) + 1;
int precision = 2; // Number of digits after decimal point
String fmt = "%"+(ndigits+1+precision)+"."+precision+"f"; // "%x.pf", x is the TOTAL length, including the point and precision digits

在你的循环中:

System.out.format(fmt, value);

关于java - 获取两个数字之间的位数差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36651897/

相关文章:

java - 在maven2构建中阻止EntityResolver使用互联网?

java - 如何在不重新订阅的情况下替换 Flowable

java - POST 请求期间出现错误 400(错误请求)

java - Android 应用程序显示线程错误

java - repaint() 不再工作

java - 当我当前的工作目录不是默认包时,如何编译文件?

java - findFragmentByTag 不起作用

java - 递归回调虚拟方法

java - 如何从不同的可发送电子邮件的 html 文件构建单个 testNG 可发送电子邮件的报告

java - 为什么自定义对象不是 HashMap 的等效键?