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 双精度值

在java中将双精度值舍入为两位有效数字[重复]

Java - Decimal Format.parse 返回具有指定小数位数的双精度值

通过 .NET 远程传输后,双精度值发生了变化

将非常小的双精度值转换为字符串(使用科学计数法)(Java)

单精度和双精度浮点值有啥不同? [复制]