Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 纬度的正则表达式,要求小数点后6位_Java_Regex_String_Double - Fatal编程技术网

Java 纬度的正则表达式,要求小数点后6位

Java 纬度的正则表达式,要求小数点后6位,java,regex,string,double,Java,Regex,String,Double,我需要一个Java正则表达式,它将检查double的字符串表示是否需要6位小数。小数点之前的值可以是正值或负值 1.123456 - correct -123123123.123456 - correct 123123123.123456 - correct -123123123.123456 - correct 1.12345 - wrong -.123456 - wrong .123456 - wrong .12345 - wrong 123456 - wrong 我试过: ^\s*(?

我需要一个Java正则表达式,它将检查double的字符串表示是否需要6位小数。小数点之前的值可以是正值或负值

1.123456 - correct
-123123123.123456 - correct
123123123.123456 - correct
-123123123.123456 - correct

1.12345 - wrong
-.123456 - wrong
.123456 - wrong
.12345 - wrong
123456 - wrong
我试过:

^\s*(?=.*[1-9])\d*(\.\d{6})?\s*$

但是它并没有覆盖所有的边缘。

有效的输入应该是

  • 以可选空格开始--->
    ^\s*
  • 然后选择
    -
    +
    ->
    (-124;\+)?
  • 然后是一个或多个数字-->
    \d+
  • 然后是一个点-->
  • 然后是六位数字-->
    (\d{6})
  • 以可选空格结尾--->
    ^\s*
试试这个:

^\s*(-|\+)?\d+\.(\d{6})\s*$
^\s*(-|\+)?(0|[1-9]\d*)\.\d{6}\s*$
试试这个:

^\s*(-|\+)?\d+\.(\d{6})\s*$
^\s*(-|\+)?(0|[1-9]\d*)\.\d{6}\s*$


只有当第一个数字是点之前的唯一数字时,这才允许第一个数字为零,例如
0.123456
正常,但不是
01.123456
<代码>\.\d{6}需要精确的6位小数。

在您的正则表达式中,正向前瞻
(?=.[1-9])
断言右侧的内容应该包含一个数字,该数字将适用于所有示例。在该断言之后,您匹配零个或多个数字
\d*
,然后是可选地匹配一个点和6个数字的部分
(\.\d{6})
,因此这将匹配
.588888
1

如果要匹配可选减号,可以使用
-?

对于示例数据,您可以使用:

在Java中:

String regex = "^-?\\d+\\.\\d{6}$";
解释

  • ^
    断言行的开头
  • -?
    匹配可选减号
  • \d+\.\d{6}
    匹配一个或多个数字、一个点和6个数字
  • $
    断言行的结尾

如果您需要6位小数,为什么要选择小数?我马上可以想象一个edge案例。如果lat/lng值只有4位,因为从第五位开始的所有值都已知为零且不显示,会发生什么情况?那么,您是否仍然始终需要6位数字?双精度和“小数位数”是两个基本上彼此无关的概念(可能令人惊讶)。也许你指的是包含十进制数的字符串,而不是双精度?在该值和双精度值之间转换是有损操作。双精度值是“双精度字符串”吗?不清楚什么时候double是双字符串或双文本。此外,在你的问题中什么算“正确”和“错误”?您应该给出当前和预期的结果,以支持这些数字字符串的“正确性”和“错误性”。这个问题已被否决,因此需要紧急关注。