绘制浮动并控制小数位

时间:2016-10-03 02:21:28

标签: java

如果您运行此程序,您会注意到显示摄氏转换的表看起来很时髦。我一直试图做的是让它停在第十位。我真的很感激任何反馈。提前谢谢。

输出:

Output

import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;


public class Foo extends Frame
{
    public Foo()
    {
        setTitle(" Fahrenheit To Celsius Chart");
        setSize(400, 600);
        setVisible(true);

        addWindowListener(
            new WindowAdapter()
            {
                public void windowClosing(WindowEvent e)
                {
                    System.exit(0);
                }
            }
        );
    }

    public static void main(String[] args)
    {
        Foo chart = new Foo();
    }

    public void paint (Graphics g)
    {
        for(int i = 0; i < 25; i++)
        {
            g.setColor(Color.BLACK);
            g.setFont(new Font("SansSerif", Font.BOLD, 14 ));
            g.drawString("Fahrenheit", 70, 110);
            g.drawString("Celsius", 200, 110);

            int[] tempF = new int[25];
            int y = 100, x = 130;
            int y1 = 215, x1 = 130;
            tempF[0] = 0;


            int counter = 0;
            while(counter < 26)
            {
                int index = 0;
                String Fahrenheit = String.valueOf(tempF[index]);
                double tempC = (tempF[index] - 32) * (5/9.0);
                String Celsius = String.valueOf(tempC);
                String formatedCelcius = String.format("%.1f", tempC);
                g.drawString(Fahrenheit, y, x);
                g.drawString(Celsius, y1, x1);
                x += 15;
                x1 += 15;
                tempF[index] += 10;
                index++;
                counter++;
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

渲染温度的代码应如下所示:

String Fahrenheit = String.valueOf(tempF[index]);
double tempC = (tempF[index] - 32) * (5/9.0);
String formattedCelcius = String.format("%.1f", tempC);
g.drawString(Fahrenheit, y, x);
g.drawString(formattedCelcius, y1, x1);

在你的代码中,你做了:

String.format("%.1f", Celsius);

而不是:

String.format("%.1f", tempC);

(我希望区别很明显) %f格式说明符需要Double参数(如tempC),但您传入了一个字符串(Celsius

这会导致java.util.IllegalFormatConversionException: f != java.lang.String(您可能没有看到异常被抛入Swing事件线程),这会中止paint方法的其余部分。

答案 1 :(得分:0)

感谢大家的反馈意见。我找到了解决方案。 Math类有一个函数round()来完成这个技巧。我把它放进去并解决了这个问题:

double tempC = (tempF[index] - 32) * (5/9.0);
double c = Math.round(tempC);

更改后我得到了正确的输出:

Final Output

再次感谢大家的反馈。

致以最诚挚的问候,

DDKGM