【问题标题】:Why java converts double to exponential form为什么java将double转换为指数形式
【发布时间】:2012-12-19 07:43:14
【问题描述】:

我有问题。在我的 jsp 页面中,我有一个接受货币价值的文本字段。当我输入诸如66777764 之类的值时,只要出现验证错误,它就会在我的文本字段中变为6.6777764E7。我知道这不会影响保存在数据库中的值,但我认为它会误导/混淆用户。请帮忙。提前致谢。

【问题讨论】:

  • 这完全取决于您如何格式化double。搜索“java format double”,您将获得大量信息。此外,永远不要使用double(或其他浮点数作为货币值。

标签: java spring jsp exponential


【解决方案1】:

您的号码似乎保留为double,所以66777764 实际上是66.777764.0,它会显示您得到的信息。

您可以根据需要使用DecimalFormat 来格式化数字的显示,例如:

double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d)); // will print 1.23

这将在点后显示 2 位数字 (66777764.00),格式有很多选项,请查看文档以获取信息。

【讨论】:

  • BigDecimal 的答案仍然是关于货币的好建议。
【解决方案2】:

关注BigDecimal

BigDecimal bd = new BigDecimal(inputVal);
System.out.println(bd);

【讨论】:

    【解决方案3】:

    使用BigDecimal 保留货币价值。

    double d = 66777764d;
    BigDecimal bd = new BigDecimal(d);
    System.out.println(bd);
    

    阅读the answer of this question,了解为什么应该使用 BigDecimal。

    【讨论】:

    • 我想补充一点:永远不要使用浮点数,即 Java 中的 double 或 float 来保存货币值。你会遇到麻烦的。
    猜你喜欢
    • 1970-01-01
    • 2011-12-10
    • 2014-12-02
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    相关资源
    最近更新 更多