我想把一个双精度值转换成字符串并显示在html输入标记中。代码:
<input type="text" class="form-control" value="91"> <input type="text" value="<%=details.getPhno()%>" class="form-control" readonly>
jm2pwxwz1#
你。。。有。。。一个电话号码。。。存储。。。作为替身?你不能那样做。双打给你错误的答案。它们并不精确。计算机不是魔法,它们有局限性。double存储在64位中。所以,根据基本数学,最多有2^64个唯一的双精度。不能再多了。2^64是一个大数,但它与负无穷大和正无穷大之间存在多少个数相比就不算什么了,正无穷大是无穷大的两个整数阶,大于2^64。它的工作方式如下:有2^64(略低于这个数字)“受祝福的”数字。这些数字可存储为两倍。所有其他数字(非祝福)数字都会自动四舍五入到最近的祝福数字。过于简单化一点,这些受祝福的数字分布不均匀。接近1.0(和-1.0)时,有很多em。当你离它越远(比如说,几百万)时,它们就越少。这意味着您永远不应该存储任何id('数字'),例如“add1”就是没有意义的。在一个电话号码上加1是你永远不会做的事)作为一个双重身份。您将随机将您的号码从12345679更改为12345678,绝对没有任何警告。这也意味着“将double渲染为字符串”很棘手。因为例如0.3是不受祝福的,所以它实际上存储为0.29999999546。这意味着当您将一个double呈现给一个字符串时,您必须告诉java您需要的精度。所以,你不需要 Double.toString(...) ,你会的 String.format("%.2f", theNumber) ,告诉java:我不希望逗号后的精度超过2位数。所以,概括一下:你的设计是根本性的破坏,无法修复,直到你更新数据库,停止存储电话号码作为一个双精度。您应该将其存储为字符串。对于非电话号码目的,在将double呈现为字符串时,正确的方法是 String.format("%.2f", theNumber) ,其中“2”表示所需小数点分隔符后的位数。
Double.toString(...)
String.format("%.2f", theNumber)
dpiehjr42#
好:
Double.toString(details.getPhno())
应该足够了,但你也可以这样做:
new StringBuilder().append(details.getPhno()).toString() // or String.format("%f", details.getPhno()) //or String.valueOf(details.getPhno())
2条答案
按热度按时间jm2pwxwz1#
你。。。有。。。一个电话号码。。。存储。。。作为替身?
你不能那样做。
双打给你错误的答案。它们并不精确。计算机不是魔法,它们有局限性。double存储在64位中。所以,根据基本数学,最多有2^64个唯一的双精度。不能再多了。2^64是一个大数,但它与负无穷大和正无穷大之间存在多少个数相比就不算什么了,正无穷大是无穷大的两个整数阶,大于2^64。
它的工作方式如下:有2^64(略低于这个数字)“受祝福的”数字。这些数字可存储为两倍。所有其他数字(非祝福)数字都会自动四舍五入到最近的祝福数字。
过于简单化一点,这些受祝福的数字分布不均匀。接近1.0(和-1.0)时,有很多em。当你离它越远(比如说,几百万)时,它们就越少。
这意味着您永远不应该存储任何id('数字'),例如“add1”就是没有意义的。在一个电话号码上加1是你永远不会做的事)作为一个双重身份。您将随机将您的号码从12345679更改为12345678,绝对没有任何警告。
这也意味着“将double渲染为字符串”很棘手。因为例如0.3是不受祝福的,所以它实际上存储为0.29999999546。这意味着当您将一个double呈现给一个字符串时,您必须告诉java您需要的精度。所以,你不需要
Double.toString(...)
,你会的String.format("%.2f", theNumber)
,告诉java:我不希望逗号后的精度超过2位数。所以,概括一下:
你的设计是根本性的破坏,无法修复,直到你更新数据库,停止存储电话号码作为一个双精度。您应该将其存储为字符串。
对于非电话号码目的,在将double呈现为字符串时,正确的方法是
String.format("%.2f", theNumber)
,其中“2”表示所需小数点分隔符后的位数。dpiehjr42#
好:
应该足够了,但你也可以这样做: