有没有办法将通过会话获取的数据库中的双精度值转换为字符串?

Is there a way to Convert double value from database taken through session to String?

我想将双精度值转换为字符串并显示在 HTML 输入标签中。 代码:

<input type="text" class="form-control" value="91"> <input
                type="text" value="<%=details.getPhno()%>" class="form-control"
                readonly>

嗯:

Double.toString(details.getPhno())

应该够了,但你也可以这样做:

new StringBuilder().append(details.getPhno()).toString()
// or
String.format("%f", details.getPhno())
//or
String.valueOf(details.getPhno())

您...有...一个 phone 号码...存储...作为双?

你不能那样做。

替身给你错误的答案。它们并不精确。计算机不是魔法,它们有局限性。 double 以 64 位存储。因此,根据基础数学,最多有 2^64 个独特的双打。不能再多了。 2^64 是一个很大的数字,但与负无穷大和正无穷大之间存在的数字相比,这算不了什么,正无穷大比 2^64 大 2 个整数阶。

它的工作方式如下:有 2^64(略少于)'blessed' 个数字。这些数字可以存储为双精度。所有其他数字(非祝福)数字都默默地四舍五入到最接近的祝福数字。

过于简单化了,这些有福的数字并不是平均分配的。接近 1.0(和 -1.0)时,有很多 em。随着你离它越来越远(比如几百万),它就会越来越少。

这意味着您不应该存储任何 ID('numbers',其中例如“加 1”是没有意义的。向 phone 数字加 1 不是您想要的d 曾经做过)作为替身。你会随机将你的号码从 12345679 更改为 12345678,完全没有警告。

也说明'render a double to a string'有猫腻。因为例如0.3 没有得到祝福,所以实际上存储为 0.29999999999999546。这意味着当您将 double 呈现为字符串时,您必须告诉 java 您正在寻找多少精度。所以,你不会做 Double.toString(...),你会做 String.format("%.2f", theNumber),来告诉 java:我不是在寻找逗号后超过 2 位数的精度。

所以,回顾一下:

  1. 您的设计从根本上被破坏了并且无法修复,直到您更新您的数据库以停止将 phone 数字存储为双精度数。您应该将其存储为字符串。
  2. 对于非phone-number 目的,当将 double 呈现为字符串时,正确的方法是 String.format("%.2f", theNumber),其中“2”表示您想要的小数点后的位数。