Double计算错误的浮点数

时间:2017-11-02 11:16:38

标签: java jtextfield

我目前正在开展一个项目,其中包含屏幕上某些值的计算:

<section class='service-widget is-closed'  id='service_id>

对于open Microsoft.FSharp.Linq.RuntimeHelpers open System open System.Linq.Expressions open Accord.Math.Optimization module Vector= let compareScalarProcut(a:double[])(b:double[])(greaterOrEqualThen:float)= Array.map2 (*) a b |> Array.sum |> fun x-> x >= greaterOrEqualThen module Lambda = let toExpression (``f# lambda`` : Quotations.Expr<'a>) = ``f# lambda`` |> LeafExpressionConverter.QuotationToExpression |> unbox<Expression<'a>> let LambdaExpression (coefficients:double[]) = <@ Func<double[], bool>(fun i -> (Vector.compareScalarProcut(i,coefficients,0)) @> |> Lambda.toExpression ,TextField按预期显示double calculatedValue; double calculatedValue2; private JTextField firstUnity; private JTextField secondUnity; firstUnity = new JTextField(); firstUnity.setEditable(false); secondUnity = new JTextField(); secondUnity.setEditable(false); add(firstUnity); add(secondUnity); public void calculate(){ calculatedValue = 10/2.5; calculatedValue2 = 10/2.55; firstUnity.setText(String.valueOf(calculatedValue)); secondUnity.setText(String.valueOf(calculatedValue2)); } 。 很遗憾,firstUnity显示4

有人可以向我解释这种解释的原因是什么?

感谢您的帮助

2 个答案:

答案 0 :(得分:5)

JTextField太短,无法显示double。您可以通过确保标签足够宽,或通过使用DecimalFormat减少显示的小数位数来解决此问题:

public static final DecimalFormat DISPLAY_FORMAT = new DecimalFormat("#.####");

public void calculate(){
    calculatedValue = 10/2.5;
    calculatedValue2 = 10/2.55;
    firstUnity.setText(FORMAT.format(calculatedValue));
    secondUnity.setText(FORMAT.format(calculatedValue2));
}

您可以通过增加/减少#构造函数参数中DecimalFormat个字符的数量来调整显示的小数位数。

答案 1 :(得分:4)

calculatedValue2 = 3.9215686274509807的答案。 查看最后一个数字是否符合您的错误答案&#39;?

我认为您的文字区域不够广泛,无法显示整个答案。 尝试更改文本字段的大小。