Java Rest 发送双精度值
Posted
技术标签:
【中文标题】Java Rest 发送双精度值【英文标题】:Java Rest send double values 【发布时间】:2012-12-19 00:17:47 【问题描述】:在我的 Java Jersey Rest 服务中,对于更新方法,值“money”在服务器中表示为 long。有效值在 30.00 和 500.00 之间
哪种方法更标准?我是否应该强制客户端将货币值发送为 30.00 并在服务器中手动解析,而不是使其加倍/长。或以 3000 发送并以这种方式解析。或者在 java/jerseylibrary 中已经有一种方法。
@PUT
@Path("/money")
@Consumes("text/plain)
public void updateThreshold(String threshold)
*//check value and update in server*
注意:我不想使用参数化请求将参数类型设置为双精度
【问题讨论】:
【参考方案1】:以美分为单位保存所有数据会容易得多。它避免了一些可能的四舍五入问题和不同的数据格式(在这些国家使用“,”作为分隔符,在其他“。”中),也更好地在 DB 中存储和排序 int 值。
【讨论】:
tnx 我不知道分,是标准还是命名,如何转换? 我认为@Imysak 的意思是美分……以货币单位表示……美元、美分等) thanx @anurag-kapur,我的意思是如果你有 2 位精度的 double,你可以将它存储为 int(只有 x100,所以你保持需要的精度很好)。【参考方案2】:如果你不能选择使用 cents,让用户传递一个字符串然后使用 Float.parseFloat(floatval) 怎么样?
适用于字符串输入,例如:30.98、30 和 30.00 示例:
String amount1 = "30.98";
String amount2 = "30";
String amount3 = "30.00";
System.out.println("Amount :: " + Float.parseFloat(amount1));
System.out.println("Amount :: " + Float.parseFloat(amount2));
System.out.println("Amount :: " + Float.parseFloat(amount3));
输出:
Amount :: 30.98
Amount :: 30.0
Amount :: 30.0
【讨论】:
以上是关于Java Rest 发送双精度值的主要内容,如果未能解决你的问题,请参考以下文章
Java - Decimal Format.parse 返回具有指定小数位数的双精度值