Tôi cần kiểm tra PHP nếu người dùng nhập số thập phân [cách chúng tôi, với dấu thập phân: X.XXX]
Bất kỳ cách đáng tin cậy để làm điều này?
Uwe keim
38.8K56 Huy hiệu vàng174 Huy hiệu bạc286 Huy hiệu Đồng56 gold badges174 silver badges286 bronze badges
Đã hỏi ngày 21 tháng 7 năm 2011 lúc 7:22Jul 21, 2011 at 7:22
CodevirtuosocodevirtuosoCodeVirtuoso
6.13012 Huy hiệu vàng44 Huy hiệu bạc62 Huy hiệu Đồng12 gold badges44 silver badges62 bronze badges
6
Bạn có thể nhận được hầu hết những gì bạn muốn từ IS_FLOAT, nhưng nếu bạn thực sự cần biết liệu nó có số thập phân trong đó hay không, chức năng của bạn ở trên không xa [mặc dù ngôn ngữ sai]:
function is_decimal[ $val ]
{
return is_numeric[ $val ] && floor[ $val ] != $val;
}
Đã trả lời ngày 21 tháng 7 năm 2011 lúc 7:28Jul 21, 2011 at 7:28
Cwallenpolecwallenpoolecwallenpoole
77.9K26 Huy hiệu vàng126 Huy hiệu bạc164 Huy hiệu đồng26 gold badges126 silver badges164 bronze badges
7
Nếu bạn muốn "10,00" trả về câu trả lời của Cheon Night Owl
Nếu bạn muốn biết liệu số thập phân có giá trị bạn có thể sử dụng câu trả lời này không.
Hoạt động với tất cả các loại [int, float, chuỗi][int, float, string]
if[fmod[$val, 1] !== 0.00]{
// your code if its decimals has a value
} else {
// your code if the decimals are .00, or is an integer
}
Examples:
[fmod[1.00, 1] !== 0.00] // returns false
[fmod[2, 1] !== 0.00] // returns false
[fmod[3.01, 1] !== 0.00] // returns true
[fmod[4.33333, 1] !== 0.00] // returns true
[fmod[5.00000, 1] !== 0.00] // returns false
[fmod['6.50', 1] !== 0.00] // returns true
Explanation:
if[fmod[$val, 1] !== 0.00]{
// your code if its decimals has a value
} else {
// your code if the decimals are .00, or is an integer
}
7 Trả về phần còn lại điểm nổi [modulo] của sự phân chia của các đối số, [do đó [! == 0,00]]Toán tử mô đun - Tại sao không sử dụng toán tử mô đun? Ví dụ.
8 - why not use the modulus operator? E.g. if[fmod[$val, 1] !== 0.00]{
// your code if its decimals has a value
} else {
// your code if the decimals are .00, or is an integer
}
if[fmod[$val, 1] !== 0.00]{
// your code if its decimals has a value
} else {
// your code if the decimals are .00, or is an integer
}
8Từ các tài liệu PHP:
Toán tử mô đun được chuyển đổi thành số nguyên [bằng cách tước phần thập phân] trước khi xử lý.
Sẽ phá hủy một cách hiệu quả mục đích OP, trong các ngôn ngữ khác như JavaScript, bạn có thể sử dụng toán tử mô đun
Đã trả lời ngày 6 tháng 11 năm 2014 lúc 13:23Nov 6, 2014 at 13:23
1
Nếu tất cả những gì bạn cần biết là liệu một điểm thập phân tồn tại trong một biến thì điều này sẽ hoàn thành công việc ...
function containsDecimal[ $value ] {
if [ strpos[ $value, "." ] !== false ] {
return true;
}
return false;
}
Đây không phải là một giải pháp rất thanh lịch nhưng nó hoạt động với dây và phao.
Đảm bảo sử dụng! == và không! = Trong thử nghiệm strpos hoặc bạn sẽ nhận được kết quả không chính xác.
Đã trả lời ngày 24 tháng 1 năm 2012 lúc 4:07Jan 24, 2012 at 4:07
Owlnight OwlNight Owl
4.1484 Huy hiệu vàng27 Huy hiệu bạc37 Huy hiệu đồng4 gold badges27 silver badges37 bronze badges
1
Một cách khác để giải quyết điều này:
if[fmod[$val, 1] !== 0.00]{
// your code if its decimals has a value
} else {
// your code if the decimals are .00, or is an integer
}
9 :]Đã trả lời ngày 21 tháng 7 năm 2011 lúc 7:33Jul 21, 2011 at 7:33
k102k102k102
7,6037 Huy hiệu vàng50 Huy hiệu bạc69 Huy hiệu Đồng7 gold badges50 silver badges69 bronze badges
0
Các chức năng bạn đã đăng không chỉ là PHP.
Hãy xem
[fmod[1.00, 1] !== 0.00] // returns false
[fmod[2, 1] !== 0.00] // returns false
[fmod[3.01, 1] !== 0.00] // returns true
[fmod[4.33333, 1] !== 0.00] // returns true
[fmod[5.00000, 1] !== 0.00] // returns false
[fmod['6.50', 1] !== 0.00] // returns true
0 [Docs].Chỉnh sửa: Tôi đã bỏ lỡ phần "người dùng đã nhập giá trị". Trong trường hợp này, bạn thực sự có thể sử dụng một biểu thức thông thường: I missed the "user entered value" part. In this case you can actually use a regular expression:
^\d+\.\d+$
Đã trả lời ngày 21 tháng 7 năm 2011 lúc 7:26Jul 21, 2011 at 7:26
Felix Klingfelix KlingFelix Kling
775K172 Huy hiệu vàng1070 Huy hiệu bạc1118 Huy hiệu đồng172 gold badges1070 silver badges1118 bronze badges
2
Tôi đã được thông qua một chuỗi, và muốn biết đó có phải là số thập phân hay không. Tôi đã kết thúc với điều này:
function isDecimal[$value]
{
return [[float] $value !== floor[$value]];
}
Tôi đã thực hiện một loạt các bài kiểm tra bao gồm số thập phân và không quyết định ở cả hai bên bằng không, và nó dường như hoạt động.
gen_Eric
Phim thương hiệu vàng 218K4040 gold badges297 silver badges336 bronze badges
Đã trả lời ngày 13 tháng 10 năm 2011 lúc 16:58Oct 13, 2011 at 16:58
Jeff vjeff vJeff V
511 Huy hiệu bạc1 Huy hiệu đồng1 silver badge1 bronze badge
1
[fmod[1.00, 1] !== 0.00] // returns false
[fmod[2, 1] !== 0.00] // returns false
[fmod[3.01, 1] !== 0.00] // returns true
[fmod[4.33333, 1] !== 0.00] // returns true
[fmod[5.00000, 1] !== 0.00] // returns false
[fmod['6.50', 1] !== 0.00] // returns true
1 trả về [fmod[1.00, 1] !== 0.00] // returns false
[fmod[2, 1] !== 0.00] // returns false
[fmod[3.01, 1] !== 0.00] // returns true
[fmod[4.33333, 1] !== 0.00] // returns true
[fmod[5.00000, 1] !== 0.00] // returns false
[fmod['6.50', 1] !== 0.00] // returns true
2 cho số thập phân và số nguyên. Vì vậy, nếu người dùng của bạn lười biếng vào [fmod[1.00, 1] !== 0.00] // returns false
[fmod[2, 1] !== 0.00] // returns false
[fmod[3.01, 1] !== 0.00] // returns true
[fmod[4.33333, 1] !== 0.00] // returns true
[fmod[5.00000, 1] !== 0.00] // returns false
[fmod['6.50', 1] !== 0.00] // returns true
3 thay vì [fmod[1.00, 1] !== 0.00] // returns false
[fmod[2, 1] !== 0.00] // returns false
[fmod[3.01, 1] !== 0.00] // returns true
[fmod[4.33333, 1] !== 0.00] // returns true
[fmod[5.00000, 1] !== 0.00] // returns false
[fmod['6.50', 1] !== 0.00] // returns true
4, nó vẫn sẽ trả về [fmod[1.00, 1] !== 0.00] // returns false
[fmod[2, 1] !== 0.00] // returns false
[fmod[3.01, 1] !== 0.00] // returns true
[fmod[4.33333, 1] !== 0.00] // returns true
[fmod[5.00000, 1] !== 0.00] // returns false
[fmod['6.50', 1] !== 0.00] // returns true
2:echo is_numeric[1]; // true
echo is_numeric[1.00]; // true
Bạn có thể muốn chuyển đổi số nguyên thành số thập phân với PHP hoặc để cơ sở dữ liệu của bạn làm điều đó cho bạn.
Đã trả lời ngày 20 tháng 11 năm 2013 lúc 14:15Nov 20, 2013 at 14:15
rybo111rybo111rybo111
Huy hiệu vàng 12k459 Huy hiệu bạc69 Huy hiệu đồng4 gold badges59 silver badges69 bronze badges
1
Đây là một cách dung nạp hơn để xử lý điều này với đầu vào của người dùng. Regex này sẽ khớp với cả "100" hoặc "100.1" nhưng không cho phép các số âm.
/^[\d+][\.\d+]?$/
Đã trả lời ngày 10 tháng 9 năm 2013 lúc 18:05Sep 10, 2013 at 18:05
ChaoixchaoixChaoix
1.26810 Huy hiệu bạc13 Huy hiệu đồng10 silver badges13 bronze badges
// if numeric
if [is_numeric[$field]] {
$whole = floor[$field];
$fraction = $field - $whole;
// if decimal
if [$fraction > 0]
// do sth
else
// if integer
// do sth
}
else
// if non-numeric
// do sth
Đã trả lời ngày 31 tháng 7 năm 2014 lúc 12:46Jul 31, 2014 at 12:46
Van Bienvan BienVan Bien
111 huy hiệu bạc2 huy hiệu đồng1 silver badge2 bronze badges
Tôi sử dụng cái này:
function is_decimal [$price]{
$value= trim[$price]; // trim space keys
$value= is_numeric[$value]; // validate numeric and numeric string, e.g., 12.00, 1e00, 123; but not -123
$value= preg_match['/^\d$/', $value]; // only allow any digit e.g., 0,1,2,3,4,5,6,7,8,9. This will eliminate the numeric string, e.g., 1e00
$value= round[$value, 2]; // to a specified number of decimal places.e.g., 1.12345=> 1.12
return $value;
}
Đã trả lời ngày 5 tháng 7 năm 2014 lúc 4:19Jul 5, 2014 at 4:19
0
if[fmod[$val, 1] !== 0.00]{
// your code if its decimals has a value
} else {
// your code if the decimals are .00, or is an integer
}
0Đã trả lời ngày 3 tháng 3 năm 2014 lúc 11:20Mar 3, 2014 at 11:20
NeocortexneocortexNeocortex
6439 Huy hiệu bạc32 Huy hiệu Đồng9 silver badges32 bronze badges
Một sự kết hợp hoàn toàn .. nhưng hey nó hoạt động!
if[fmod[$val, 1] !== 0.00]{
// your code if its decimals has a value
} else {
// your code if the decimals are .00, or is an integer
}
1Đã trả lời ngày 6 tháng 3 năm 2015 lúc 22:22Mar 6, 2015 at 22:22
Duane Lortieduane LortieDuane Lortie
1.2821 Huy hiệu vàng12 Huy hiệu bạc16 Huy hiệu đồng1 gold badge12 silver badges16 bronze badges
Cách dễ dàng để tìm ra giá trị được đăng là số nguyên và float vì vậy điều này sẽ giúp bạn
if[fmod[$val, 1] !== 0.00]{
// your code if its decimals has a value
} else {
// your code if the decimals are .00, or is an integer
}
2Nếu bạn cho 10 hoặc 10,5 hoặc 10.0, kết quả sẽ thành công nếu bạn xác định bất kỳ ký tự hoặc ký tự specail nào không có dấu chấm, nó sẽ không thành công
Đã trả lời ngày 25 tháng 12 năm 2019 lúc 11:57Dec 25, 2019 at 11:57
Abubakkar Tahirabubakkar Tahirabubakkar tahir
6971 Huy hiệu vàng11 Huy hiệu bạc12 Huy hiệu đồng1 gold badge11 silver badges12 bronze badges
Làm thế nào về
[fmod[1.00, 1] !== 0.00] // returns false
[fmod[2, 1] !== 0.00] // returns false
[fmod[3.01, 1] !== 0.00] // returns true
[fmod[4.33333, 1] !== 0.00] // returns true
[fmod[5.00000, 1] !== 0.00] // returns false
[fmod['6.50', 1] !== 0.00] // returns true
6? Nếu [fmod[1.00, 1] !== 0.00] // returns false
[fmod[2, 1] !== 0.00] // returns false
[fmod[3.01, 1] !== 0.00] // returns true
[fmod[4.33333, 1] !== 0.00] // returns true
[fmod[5.00000, 1] !== 0.00] // returns false
[fmod['6.50', 1] !== 0.00] // returns true
2 thì đó là thập phân, nếu [fmod[1.00, 1] !== 0.00] // returns false
[fmod[2, 1] !== 0.00] // returns false
[fmod[3.01, 1] !== 0.00] // returns true
[fmod[4.33333, 1] !== 0.00] // returns true
[fmod[5.00000, 1] !== 0.00] // returns false
[fmod['6.50', 1] !== 0.00] // returns true
8 thì không.Đã trả lời ngày 29 tháng 11 năm 2021 lúc 15:49Nov 29, 2021 at 15:49
Tôi không thể bình luận, nhưng tôi có hành vi thú vị này. [Đã thử nghiệm trên v. 7.3.19 trên một trang web để thử nghiệm PHP trực tuyến]
Nếu bạn nhân 50 với 1,1 FMOD cho kết quả khác với dự kiến. Nếu bạn làm bằng 1.2 hoặc 1.3 thì tốt, nếu bạn làm một số khác [như 60 hoặc 40] cũng tốt.
if[fmod[$val, 1] !== 0.00]{
// your code if its decimals has a value
} else {
// your code if the decimals are .00, or is an integer
}
3Đã trả lời ngày 6 tháng 2 lúc 18:37Feb 6 at 18:37
1
Giải pháp đơn giản nhất là
if[fmod[$val, 1] !== 0.00]{
// your code if its decimals has a value
} else {
// your code if the decimals are .00, or is an integer
}
4Đã trả lời ngày 24 tháng 8 năm 2017 lúc 10:06Aug 24, 2017 at 10:06
Ayyaz Zafarayyaz ZafarAyyaz Zafar
1.9085 Huy hiệu vàng25 Huy hiệu bạc39 Huy hiệu đồng5 gold badges25 silver badges39 bronze badges
Nếu bạn đang làm việc với xác thực biểu mẫu. Sau đó trong trường hợp này biểu mẫu gửi chuỗi. Tôi đã sử dụng mã sau để kiểm tra đầu vào hình thức là số thập phân hay không. Tôi hy vọng điều này cũng sẽ làm việc cho bạn.
if[fmod[$val, 1] !== 0.00]{
// your code if its decimals has a value
} else {
// your code if the decimals are .00, or is an integer
}
5Đã trả lời ngày 15 tháng 12 năm 2017 lúc 2:17Dec 15, 2017 at 2:17
Adnan Ahmadadnan AhmadAdnan Ahmad
7901 Huy hiệu vàng11 Huy hiệu bạc12 Huy hiệu đồng1 gold badge11 silver badges12 bronze badges
if[fmod[$val, 1] !== 0.00]{
// your code if its decimals has a value
} else {
// your code if the decimals are .00, or is an integer
}
6Các vấn đề đã biết với chức năng trên:
1] Không hỗ trợ "Ký hiệu khoa học" [1.23E-123], tài chính [hàng đầu $ hoặc khác] hoặc "Facing F" [phao C ++] hoặc "tiền tệ kéo dài" [USD, GBP, v.v.]
2] Sai dương trên các tên tệp chuỗi khớp với số thập phân: Xin lưu ý rằng ví dụ "10.0" vì tên tệp không thể được phân biệt với số thập phân, vì vậy nếu bạn đang cố gắng phát hiện một loại từ một chuỗi một mình và tên tệp phù hợp với số thập phân Tên và không có đường dẫn bao gồm, sẽ không thể nhận ra.
Đã trả lời ngày 10 tháng 2 năm 2020 lúc 19:24Feb 10, 2020 at 19:24
Có thể thử xem xét điều này là tốt
[fmod[1.00, 1] !== 0.00] // returns false
[fmod[2, 1] !== 0.00] // returns false
[fmod[3.01, 1] !== 0.00] // returns true
[fmod[4.33333, 1] !== 0.00] // returns true
[fmod[5.00000, 1] !== 0.00] // returns false
[fmod['6.50', 1] !== 0.00] // returns true
9Đã trả lời ngày 23 tháng 12 năm 2012 lúc 4:13Dec 23, 2012 at 4:13
Cam Tulloscam TullosCam Tullos
2.4771 Huy hiệu vàng20 Huy hiệu bạc18 Huy hiệu đồng1 gold badge20 silver badges18 bronze badges
0